<?php

class JobsController extends AppController {

    var $name = 'Jobs';
    var $uses = array('Job', 'Costume', 'Employee', 'Show', 'Production',
        'Provider', 'Service', 'JobsDetail', 'JobsDetailsEmployee',
        'PricetypesReception', 'PricetypesAnimation', 'PricetypesService',
        'PricetypesShow', 'Anotation', 'Activity', 'CashMovement', 'Cash',
        'User', 'BigCashMovement');

    function index($type = null, $date_from = null, $date_to = null, $particular = null) {
        if ($type != null) {
            $this->data['Job']['type'] = $type;
            $this->data['Job']['date_from'] = date('d/m/Y', strtotime($date_from));
            $this->data['Job']['date_to'] = date('d/m/Y', strtotime($date_to));
            $this->data['Job']['particular'] = $particular;
        }
        $this->Job->recursive = 0;

        $sql = "SELECT *
                FROM jobs as Job
                LEFT JOIN jobs_details as JobsDetail ON Job.id = JobsDetail.job_id
                LEFT JOIN jobs_details_employees as JobsDetailsEmployee ON JobsDetail.id = JobsDetailsEmployee.jobs_detail_id
                WHERE 1=1";

        $filtro = '';
        $fecha_min = '';
        $fecha_max = '';

        //si vienen filtros aplicados
        if (!empty($this->data)) {

            $datos = $this->data['Job'];

            if (isset($datos['type']) && trim($datos['type']) != '') {
                $filtro .= ' AND Job.type = "' . $datos['type'] . '"';
            }
            if (isset($datos['pelotero_id']) && trim($datos['pelotero_id']) != '') {
                $filtro .= ' AND Job.pelotero_id = "' . $datos['pelotero_id'] . '"';
            }
            if (isset($datos['paid']) && trim($datos['paid']) != '') {
                $filtro .= ' AND Job.paid = "' . $datos['paid'] . '"';
            }
            if (isset($datos['address']) && trim($datos['address']) != '') {
                $filtro .= ' AND Job.address like "%' . $datos['address'] . '%"';
            }
            if (isset($datos['birthday_name']) && trim($datos['birthday_name']) != '') {
                $filtro .= ' AND Job.birthday_name like "%' . $datos['birthday_name'] . '%"';
            }
            if (isset($datos['contact_name']) && trim($datos['contact_name']) != '') {
                $filtro .= ' AND Job.contact_name like "%' . $datos['contact_name'] . '%"';
            }
            if (isset($datos['date_from']) && trim($datos['date_from']) != '') {
                list($d, $m, $a) = explode("/", $datos['date_from']);
                $datos['date_from'] = $a . "-" . $m . "-" . $d . ' 00:00:00';

                $filtro .= ' AND Job.start_date >= "' . $datos['date_from'] . '"';
                $fecha_min = 'si';
            }
            if (isset($datos['date_to']) && trim($datos['date_to']) != '') {
                list($d, $m, $a) = explode("/", $datos['date_to']);
                $datos['date_to'] = $a . "-" . $m . "-" . $d . ' 23:59:59';

                $filtro .= ' AND Job.finish_date <= "' . $datos['date_to'] . '"';
                $fecha_max = 'si';
            }
            if (isset($datos['particular']) && trim($datos['particular']) != '') {
                if ($datos['particular'] == 1) {
                    //es particular
                    $filtro .= ' AND Job.pelotero_id IS NULL ';
                } else {
                    //es particular
                    $filtro .= ' AND Job.pelotero_id IS NOT NULL ';
                }
            }

            //guardo el filtro usado en session para despues recordarlo
            $restricciones['Job'] = $filtro;
            $restricciones['data'] = $this->data;
            $this->Session->write('search_conditions_jobs', $restricciones);
        } elseif ($this->Session->check('search_conditions_jobs')) {

            $restricciones = $this->Session->read('search_conditions_jobs');
            $filtro = $restricciones['Job'];
            $this->data = $restricciones['data'];
            $datos = $this->data['Job'];

            if (isset($datos['date_from']) && trim($datos['date_from']) != '') {
                $fecha_min = 'si';
            }
            if (isset($datos['date_to']) && trim($datos['date_to']) != '') {
                $fecha_max = 'si';
            }
        }

        //si no viene ningun filtro de fecha, le pongo lo de la ultima semana
        if ($fecha_min != 'si' && $fecha_max != 'si') {
            $aux_fecha_min = date('Y-m-d 00:00:00');
            $aux_fecha_max = date('Y-m-d 23:59:59', strtotime('+6day', strtotime(date('Y-m-d H:i:s'))));
            $filtro .= ' AND Job.start_date >= "' . $aux_fecha_min . '"';
            $filtro .= ' AND Job.finish_date <= "' . $aux_fecha_max . '"';

            $this->data['Job']['date_from'] = date('d/m/Y', strtotime($aux_fecha_min));
            $this->data['Job']['date_to'] = date('d/m/Y', strtotime($aux_fecha_max));
        }

        $sql .= $filtro . ' order by Job.start_date ASC, Job.type DESC';

        $res = $this->Job->query($sql);

        //ahora armo bien el array de datos
        $array_datos = array();
        foreach ($res as $job) {
            $job_id = $job['Job']['id'];
            $jobsdetail_id = $job['JobsDetail']['id'];
            $jobsdetailsemployee_id = $job['JobsDetailsEmployee']['id'];

            if (!isset($array_datos[$job_id])) {
                $array_datos[$job_id]['Job'] = $job['Job'];
            }

            if (!isset($array_datos[$job_id]['Job']['JobsDetail'][$jobsdetail_id])) {
                $array_datos[$job_id]['Job']['JobsDetail'][$jobsdetail_id] = $job['JobsDetail'];
            }

            if (!isset($array_datos[$job_id]['Job']['JobsDetail'][$jobsdetail_id]['JobsDetailsEmployee'][$jobsdetailsemployee_id])) {
                $array_datos[$job_id]['Job']['JobsDetail'][$jobsdetail_id]['JobsDetailsEmployee'][$jobsdetailsemployee_id] = $job['JobsDetailsEmployee'];
            }
        }

//        pr($array_datos);
//        die;

        $this->set('jobs', $array_datos);

        //busco todos los peloteros, con toda la informacion
        $peloteros = $this->Job->Pelotero->find('list', array('recursive' => -1, 'order' => array('name' => 'ASC')));
        $this->set(compact('peloteros'));

        //busco todos los empleados
        $empleados = $this->Employee->find('all', array('fields' => array('Employee.first_name', 'Employee.last_name', 'Employee.id'), 'order' => array('first_name' => 'ASC', 'last_name' => 'ASC')));
        $employees = array();
        foreach ($empleados as $emp) {
            $employees[$emp['Employee']['id']] = $emp['Employee']['first_name'] . ' ' . $emp['Employee']['last_name'];
        }
        $this->set(compact('employees'));

        //busco todos los trajes
        $costumes = $this->Costume->find('list');
        $this->set(compact('costumes'));

        //busco todos las obras
        $productions = $this->Production->find('list');
        $this->set(compact('productions'));

        //busco todos los servicios
        $services = $this->Service->find('list');
        $this->set(compact('services'));

        //busco todos los shows
        $shows = $this->Show->find('list');
        $this->set(compact('shows'));
    }

    function view($id = null) {
        if (!$id) {
            $this->Session->setFlash(__('Cumpleaños o Evento Inexistente', true));
            $this->redirect(array('action' => 'index'));
        }

        $job = $this->Job->read(null, $id);
        $array_detalles = array();
        foreach ($job['JobsDetail'] as $detalle) {

            $array_detalles[$detalle['type']][$detalle['id']]['JobsDetail'] = $detalle;
            //ahora voy a buscar todos los JobsDetailsEmployee de este detalle
            $detalles_emp = $this->JobsDetailsEmployee->find('all', array('conditions' => array('JobsDetailsEmployee.jobs_detail_id' => $detalle['id'])));
            foreach ($detalles_emp as $emp) {
                $array_detalles[$detalle['type']][$detalle['id']]['JobsDetailsEmployee'][] = $emp['JobsDetailsEmployee'];
            }
        }
        $array_todo['Job'] = $job['Job'];
        $array_todo['detalles'] = $array_detalles;

        $this->set('job', $array_todo);

        //guardo los datos de los trajes en la session para despues tomarlo en la funcion que grafica
        $this->Session->write('data_job_view', $array_todo);

        $pricetypes = $this->Job->Pricetype->find('list');
        $this->set(compact('pricetypes'));

        //busco todos los peloteros, con toda la informacion
        $peloteros = $this->Job->Pelotero->find('list', array('recursive' => -1, 'order' => array('name' => 'ASC')));
        $this->set(compact('peloteros'));

        //traigo un array con todos los trajes
        $costumes = $this->Costume->find('list', array('order' => array('name' => 'ASC')));
        $this->set(compact('costumes'));

        //traigo un array con todos los shows
        $shows = $this->Show->find('list', array('order' => array('name' => 'ASC')));
        $this->set(compact('shows'));

        //traigo un array con todos las obras
        $productions = $this->Production->find('list', array('order' => array('name' => 'ASC')));
        $this->set(compact('productions'));

        $empleados = $this->Employee->find('all', array('fields' => array('Employee.first_name', 'Employee.last_name', 'Employee.id'), 'order' => array('first_name' => 'ASC', 'last_name' => 'ASC')));
        $employees = array();
        foreach ($empleados as $emp) {
            $employees[$emp['Employee']['id']] = $emp['Employee']['first_name'] . ' ' . $emp['Employee']['last_name'];
        }
        $this->set(compact('employees'));

        //traigo un array con todos los servicios
        $services = $this->Service->find('list', array('order' => array('name' => 'ASC')));
        $this->set(compact('services'));

        //traigo un array con todos los proveedores
        $providers = $this->Provider->find('list', array('order' => array('name' => 'ASC')));
        $this->set(compact('providers'));

        //traigo el historial de este job
        $activities = $this->Activity->find('all', array(
            'recursive' => 0,
            'conditions' => array(
                'Activity.register' => 'Job.' . $id
            ),
            'order' => array('Activity.created' => 'ASC')
                ));
        $this->set(compact('activities'));

        //busco todos los movimientos de caja chica de este trabajo, que no sean de seña
        //sino que solo de ingresos por pagos de cumpleaños
        $movimientos = $this->CashMovement->find('all', array(
            'recursive' => -1,
            'conditions' => array(
                'CashMovement.job_id' => $id,
                'CashMovement.movement' => 'birthday'
            )
                ));
        $this->set(compact('movimientos'));

        //busco todos los movimientos de caja grande de este trabajo, que no sean de seña
        //sino que solo de ingresos por pagos de cumpleaños
        $movimientos_grandes = $this->BigCashMovement->find('all', array(
            'recursive' => -1,
            'conditions' => array(
                'BigCashMovement.job_id' => $id,
                'BigCashMovement.movement' => 'bank'
            )
                ));
        $this->set(compact('movimientos_grandes'));

        $users = $this->User->find('list');
        $this->set(compact('users'));
    }

    function add($var_start_date = null, $var_finish_date = null) {
        if (!empty($this->data)) {

            $array_datos = $this->data;

            list($d, $m, $a) = explode("/", $array_datos['Job']['date_from']);
            $fecha_inicio = $a . "-" . $m . "-" . $d . ' ' . $array_datos['Job']['start_hour'] . ':' . $array_datos['Job']['start_minute'] . ':00';
            $array_datos['Job']['start_date'] = $fecha_inicio;

            $fecha_fin = $a . "-" . $m . "-" . $d . ' ' . $array_datos['Job']['finish_hour'] . ':' . $array_datos['Job']['finish_minute'] . ':00';
            $array_datos['Job']['finish_date'] = $fecha_fin;

            if ($array_datos['Job']['birthday_date'] != NULL) {
                list($d, $m, $a) = explode("/", $array_datos['Job']['birthday_date']);
                $fecha_cumple = $a . "-" . $m . "-" . $d;
                $array_datos['Job']['birthday_date'] = $fecha_cumple;
            } else {
                $array_datos['Job']['birthday_date'] = NULL;
            }

            $tipo = $array_datos['Job']['type'] == 'event' ? 'Evento' : 'Cumpleaños';

            //empiezo una transaccion
            $this->Job->query('SET AUTOCOMMIT = 0;');
            $this->Job->query('START TRANSACTION;');
            $bandera = true; //la uso para ver si algo salio mal
            //guardo el trabajo
            $this->Job->create();
            if (!$this->Job->save($array_datos)) {
                $bandera = false;
            }
            $job_id = $this->Job->id;

            //si tenia cargada la seña, entonces la guardo como movimiento de caja
            if ($array_datos['Job']['sign'] != '') {
                $array_mov = array();
                $array_mov['user_id'] = $this->Auth->user('id');
                $array_mov['type'] = 'in';
                $array_mov['movement'] = 'sign';
                $array_mov['amount'] = $array_datos['Job']['sign'];
                $array_mov['job_id'] = $job_id;

                //guardamos el movimiento
                $this->CashMovement->create();
                if (!$this->CashMovement->save($array_mov)) {
                    $bandera = false;
                }
            }

            //inicializo a cero los totales
            $job_costo_total_cliente = 0;
            $job_price_servicios = 0;
            $job_costo_empleados = 0;
            $reception_costo_empleados = 0;
            $animation_costo_empleados = 0;
            $shows_costo_empleados = 0;
            $productions_costo_empleados = 0;

            /*             * *******EMPIEZA PARTE DE RECEPCIONES***** */
            //ahora guardo las repecciones
            //si estaba chequeado el checkbox de recepciones
            if ($array_datos['Job']['check_reception'] == 1) {

                //guardo el detalle
                $reception_job_detail = array();
                $reception_job_detail['type'] = 'reception';
                $reception_job_detail['job_id'] = $job_id;
                $reception_job_detail['cost'] = $array_datos['Job']['reception_client_cost'];
                $this->JobsDetail->create();
                if (!$this->JobsDetail->save($reception_job_detail)) {
                    $bandera = false;
                }
                $reception_job_detail_id = $this->JobsDetail->id;

                //actualizo el costo total del job
                $job_costo_total_cliente += $reception_job_detail['cost'];

                //ahora guardo cuanto le pago a cada empleado
                foreach ($array_datos['JobsReceptionEmployee'] as $recep) {

//                    if ($recep['employee_id'] != NULL) {
                    if ($recep['costume_id'] != NULL) {
                        //si estaba cargada
                        $reception_job_detail_employee = array();
                        $reception_job_detail_employee['jobs_detail_id'] = $reception_job_detail_id;
                        $reception_job_detail_employee['employee_id'] = $recep['employee_id'];
                        $reception_job_detail_employee['costume_id'] = $recep['costume_id'];
                        $reception_job_detail_employee['cost'] = $recep['cost'] != NULL ? $recep['cost'] : 0;
//                        pr($reception_job_detail_employee);
//                        die;
                        $this->JobsDetailsEmployee->create();
                        if (!$this->JobsDetailsEmployee->save($reception_job_detail_employee)) {
                            $bandera = false;
                        }
                        $reception_costo_empleados += $recep['cost'];
                    }
                }

                //por ultimo actualizamos el campo que tiene el costo total por empleados
                $this->JobsDetail->id = $reception_job_detail_id;
                if (!$this->JobsDetail->saveField('employee_cost', $reception_costo_empleados)) {
                    $bandera = false;
                }
                //actualizo el costo total de empleados
                $job_costo_empleados += $reception_costo_empleados;
            }

            /*             * *******TERMINA PARTE DE RECEPCIONES***** */

            /*             * *******EMPIEZA PARTE DE ANIMACIONES***** */
            //ahora guardo las animaciones
            //si estaba chequeado el checkbox de animaciones
            if ($array_datos['Job']['check_animation'] == 1) {

                //guardo el detalle
                $animation_job_detail = array();
                $animation_job_detail['type'] = 'animation';
                $animation_job_detail['job_id'] = $job_id;
                $animation_job_detail['cost'] = $array_datos['Job']['animation_client_cost'];
                $this->JobsDetail->create();
                if (!$this->JobsDetail->save($animation_job_detail)) {
                    $bandera = false;
                }
                $animation_job_detail_id = $this->JobsDetail->id;

                //actualizo el costo total del job
                $job_costo_total_cliente += $animation_job_detail['cost'];

                //ahora guardo cuanto le pago a cada empleado
                foreach ($array_datos['JobsAnimationEmployee'] as $anim) {

                    //if ($anim['employee_id'] != NULL) {
                    if ($anim['cost'] != NULL) {
                        //si estaba cargada
                        $animation_job_detail_employee = array();
                        $animation_job_detail_employee['jobs_detail_id'] = $animation_job_detail_id;
                        $animation_job_detail_employee['employee_id'] = $anim['employee_id'];
                        $animation_job_detail_employee['cost'] = $anim['cost'] != NULL ? $anim['cost'] : 0;
                        $this->JobsDetailsEmployee->create();
                        if (!$this->JobsDetailsEmployee->save($animation_job_detail_employee)) {
                            $bandera = false;
                        }
                        $animation_costo_empleados += $anim['cost'];
                    }
                }

                //por ultimo actualizamos el campo que tiene el costo total por empleados
                $this->JobsDetail->id = $animation_job_detail_id;
                if (!$this->JobsDetail->saveField('employee_cost', $animation_costo_empleados)) {
                    $bandera = false;
                }
                //actualizo el costo total de clientes
                $job_costo_empleados += $animation_costo_empleados;
            }


            /*             * *******TERMINA PARTE DE ANIMACIONES***** */

            /*             * *******EMPIEZA PARTE DE SERVICIOS***** */
            //ahora guardo los servicios
            //si estaba chequeado el checkbox de servicios
            if ($array_datos['Job']['check_services'] == 1) {

                //ahora guardo los detalles de cada servicio
                foreach ($array_datos['JobsService'] as $serv) {

                    if ($serv['service_id'] != NULL) {
                        //si estaba cargada
                        //guardo el detalle
                        $service_job_detail = array();
                        $service_job_detail['type'] = 'service';
                        $service_job_detail['job_id'] = $job_id;
                        $service_job_detail['service_id'] = $serv['service_id'];
                        $service_job_detail['provider_id'] = $serv['provider_id'];
                        $service_job_detail['price'] = $serv['price'] != NULL ? $serv['price'] : 0;
                        $service_job_detail['cost'] = $serv['cost'] != NULL ? $serv['cost'] : 0;
                        $this->JobsDetail->create();
                        if (!$this->JobsDetail->save($service_job_detail)) {
                            $bandera = false;
                        }

                        //actualizo el precio total por servicios
                        $job_price_servicios += $service_job_detail['price'];

                        //actualizo el costo total del job
                        $job_costo_total_cliente += $service_job_detail['cost'];
                    }
                }
            }

            /*             * *******TERMINA PARTE DE SERVICIOS***** */

            /*             * *******EMPIEZA PARTE DE SHOWS***** */
            //ahora guardo los shows
            //si estaba chequeado el checkbox de shows
            if ($array_datos['Job']['check_shows'] == 1) {

                //si chequeo algun show
                if (isset($array_datos['JobsShow'])) {

                    foreach ($array_datos['JobsShow'] as $show_checked) {
                        //en el array JobsShow estan aquellos shows que tenian chequeado el checkbox
                        $show_id = $show_checked['show_id'];

                        //guardo el detalle de este show
                        $show_job_detail = array();
                        $show_job_detail['type'] = 'show';
                        $show_job_detail['job_id'] = $job_id;
                        $show_job_detail['show_id'] = $show_id;
                        $show_job_detail['cost'] = $array_datos['JobsShowEmployee'][$show_id]['client_cost'];
                        $this->JobsDetail->create();
                        if (!$this->JobsDetail->save($show_job_detail)) {
                            $bandera = false;
                        }
                        $show_job_detail_id = $this->JobsDetail->id;

                        //actualizo el costo total del job
                        $job_costo_total_cliente += $show_job_detail['cost'];

                        //ahora adentro del array $array_datos['JobsShowEmployee'] tengo los detalles de los empleados de cada show
                        foreach ($array_datos['JobsShowEmployee'][$show_id] as $aux_show_id => $show_emp) {
                            if ($aux_show_id != 'client_cost') {
//                                if ($show_emp['employee_id'] != NULL) {
                                if ($show_emp['costume_id'] != NULL) {
                                    $show_job_detail_employee = array();
                                    $show_job_detail_employee['jobs_detail_id'] = $show_job_detail_id;
                                    $show_job_detail_employee['employee_id'] = $show_emp['employee_id'];
                                    $show_job_detail_employee['costume_id'] = $show_emp['costume_id'];
                                    $show_job_detail_employee['cost'] = $show_emp['cost'] != NULL ? $show_emp['cost'] : 0;
                                    $this->JobsDetailsEmployee->create();
                                    if (!$this->JobsDetailsEmployee->save($show_job_detail_employee)) {
                                        $bandera = false;
                                    }
                                    $shows_costo_empleados += $show_job_detail_employee['cost'];
                                }
                            }
                        }
                        //por ultimo actualizamos el campo que tiene el costo total por empleados
                        $this->JobsDetail->id = $show_job_detail_id;
                        if (!$this->JobsDetail->saveField('employee_cost', $shows_costo_empleados)) {
                            $bandera = false;
                        }
                        //actualizo el costo total de clientes
                        $job_costo_empleados += $shows_costo_empleados;
                        //ahora seteo esto a cero porque sino el proximo show va a tener un costo total
                        //de empleados igual a la sumatoria de todos los shows anteriores
                        $shows_costo_empleados = 0;
                    }
                }
            }

            /*             * *******TERMINA PARTE DE SHOWS***** */

            /*             * *******EMPIEZA PARTE DE PRODUCTIONS***** */
            //ahora guardo las obras
            //si estaba chequeado el checkbox de productions
            if ($array_datos['Job']['check_productions'] == 1) {

                //si chequeo algun show
                if (isset($array_datos['JobsProduction'])) {

                    foreach ($array_datos['JobsProduction'] as $production_checked) {
                        //en el array JobsProduction estan aquellas obras que tenian chequeado el checkbox
                        $production_id = $production_checked['production_id'];

                        //guardo el detalle de esta obra
                        $production_job_detail = array();
                        $production_job_detail['type'] = 'production';
                        $production_job_detail['job_id'] = $job_id;
                        $production_job_detail['production_id'] = $production_id;
                        $production_job_detail['cost'] = $array_datos['JobsProductionEmployee'][$production_id]['client_cost'];
                        $this->JobsDetail->create();
                        if (!$this->JobsDetail->save($production_job_detail)) {
                            $bandera = false;
                        }
                        $production_job_detail_id = $this->JobsDetail->id;

                        //actualizo el costo total del job
                        $job_costo_total_cliente += $production_job_detail['cost'];

                        //ahora adentro del array $array_datos['JobsProductionEmployee'] tengo los detalles de los empleados de cada obra
                        foreach ($array_datos['JobsProductionEmployee'][$production_id] as $aux_production_id => $production_emp) {
                            if ($aux_production_id != 'client_cost') {
//                                if ($production_emp['employee_id'] != NULL) {
                                if ($production_emp['costume_id'] != NULL) {
                                    $production_job_detail_employee = array();
                                    $production_job_detail_employee['jobs_detail_id'] = $production_job_detail_id;
                                    $production_job_detail_employee['employee_id'] = $production_emp['employee_id'];
                                    $production_job_detail_employee['costume_id'] = $production_emp['costume_id'];
                                    $production_job_detail_employee['cost'] = $production_emp['cost'] != NULL ? $production_emp['cost'] : 0;
                                    $this->JobsDetailsEmployee->create();
                                    if (!$this->JobsDetailsEmployee->save($production_job_detail_employee)) {
                                        $bandera = false;
                                    }
                                    $productions_costo_empleados += $production_job_detail_employee['cost'];
                                }
                            }
                        }
                        //por ultimo actualizamos el campo que tiene el costo total por empleados
                        $this->JobsDetail->id = $production_job_detail_id;
                        if (!$this->JobsDetail->saveField('employee_cost', $productions_costo_empleados)) {
                            $bandera = false;
                        }
                        //actualizo el costo total de clientes
                        $job_costo_empleados += $productions_costo_empleados;
                        //ahora seteo esto a cero porque sino la proximo obra va a tener un costo total
                        //de empleados igual a la sumatoria de todos las obras anteriores
                        $productions_costo_empleados = 0;
                    }
                }
            }

            /*             * *******TERMINA PARTE DE PRODUCTIONS***** */


            //por ultimo actualizo los valores del costo de empleados, costo de servicios, y costo total
            $array_guardar = array();
            $array_guardar['id'] = $job_id;
            $array_guardar['total_cost'] = $job_costo_total_cliente;
            $array_guardar['services_cost'] = $job_price_servicios;
            $array_guardar['employee_cost'] = $job_costo_empleados;
            if (!$this->Job->save($array_guardar)) {
                $bandera = false;
            }

            //ahora me fijo si esto viene de la carga de una anotacion, si es asi, borro la anotacion
            if ($array_datos['Job']['anotation_id'] != '') {
                if (!$this->Anotation->delete($array_datos['Job']['anotation_id'] != '')) {
                    $bandera = false;
                }
            }

            //por ultimo, para que no joda el activity, voy a borrar la última actualización
            //de este job, porque aca primero lo creo y despues lo edito
            if (!$this->Activity->deleteAll(array('Activity.type' => 'update', 'Activity.register' => 'Job.' . $job_id), false, false)) {
                $bandera = false;
            }

            if ($bandera) {
                $this->Session->setFlash('El ' . $tipo . ' ha sido creado');
                $this->Job->query('COMMIT;');
                $this->Job->query('SET AUTOCOMMIT = 1;');
                $this->redirect(array('controller' => 'futures', 'action' => 'por_dia', strtotime($array_datos['Job']['start_date'])));
            } else {
                $this->Session->setFlash('El ' . $tipo . ' no ha sido creado. Por favor, intente nuevamente.');
                $this->Job->query('ROLLBACK;');
                $this->Job->query('SET AUTOCOMMIT = 1;');
            }
        }

        //si viene la variable $var_start_date, entonces se lo pongo en el this->data
        if ($var_start_date != NULL) {
            $this->data['Job']['date_from'] = date('d/m/Y', $var_start_date);
            $this->data['Job']['start_hour'] = date('H', $var_start_date);
            $this->data['Job']['finish_hour'] = date('H', $var_start_date);
            $this->data['Job']['start_minute'] = date('i', $var_start_date);
            $this->data['Job']['finish_minute'] = date('i', $var_start_date);
        }
        if ($var_finish_date != NULL) {
            $this->data['Job']['finish_hour'] = date('H', $var_finish_date);
            $this->data['Job']['finish_minute'] = date('i', $var_finish_date);

            if ($this->Session->check('anotation_description')) {
                $anotation_description = $this->Session->read('anotation_description');
                $anotation_id = $this->Session->read('anotation_id');
                $this->set(compact('anotation_description', 'anotation_id'));
            }
        }

        $pricetypes = $this->Job->Pricetype->find('list', array('conditions' => array('PriceType.deleted' => 0)));
        $peloteros = $this->Job->Pelotero->find('list', array('conditions' => array('Pelotero.deleted' => 0), 'order' => array('name' => 'ASC')));
        $this->set(compact('pricetypes', 'peloteros'));

        //armo el array con las horas
        $hours = array();
        for ($i = 8; $i <= 23; $i++) {
            if ($i < 10) {
                $value = '0' . $i;
            } else {
                $value = '' . $i;
            }
            $hours[$i] = $value;
        }
        $this->set(compact('hours'));

        //armo el array con los minutos
        $minutes = array(0 => '00', 30 => '30');
        $this->set(compact('minutes'));

        //busco todos los peloteros, con toda la informacion
        $peloteros_full = $this->Job->Pelotero->find('all', array('recursive' => -1, 'conditions' => array('Pelotero.deleted' => 0), 'order' => array('name' => 'ASC')));
        $this->set(compact('peloteros_full'));

        //traigo un array con todos los trajes
        $costumes = $this->Costume->find('list', array('conditions' => array('Costume.deleted' => 0), 'order' => array('name' => 'ASC')));
        $this->set(compact('costumes'));

        //traigo un array con todos los shows
        $shows = $this->Show->find('list', array('conditions' => array('Show.deleted' => 0), 'order' => array('name' => 'ASC')));
        $this->set(compact('shows'));

        //armo un array indexado por show_id que contenga los trajes que utiliza
        //cada uno, si no tiene ninguno configurado, le ponemos todos los trajes
        $todos_shows = $this->Show->find('all', array('conditions' => array('Show.deleted' => 0), 'order' => array('name' => 'ASC')));
        $shows_trajes = array();
        foreach ($todos_shows as $show) {
            if (empty($show['Costume'])) {
                //si no tiene definido los trajes que utilizara, les pongo todos
                $shows_trajes[$show['Show']['id']]['trajes'] = $costumes;
                $shows_trajes[$show['Show']['id']]['default'] = '';
            } else {
                //sino, recorro los trajes que utiliza y los voy guardando
                $array_trajes = array();
                $array_default = array();
                foreach ($show['Costume'] as $traje) {
                    $array_trajes[$traje['id']] = $traje['name'];
                    //si esta puesto como default
                    if ($traje['CostumesShow']['default'] == 1) {
                        $array_default[$traje['id']] = $traje['id'];
                    }
                }
                $shows_trajes[$show['Show']['id']]['trajes'] = $array_trajes;
                $shows_trajes[$show['Show']['id']]['default'] = implode(',', $array_default);
            }
        }
        $this->set(compact('shows_trajes'));

        //traigo un array con todos las obras
        $productions = $this->Production->find('list', array('conditions' => array('Production.deleted' => 0), 'order' => array('name' => 'ASC')));
        $this->set(compact('productions'));

        $empleados = $this->Employee->find('all', array('fields' => array('Employee.first_name', 'Employee.last_name', 'Employee.id'), 'conditions' => array('Employee.deleted' => 0), 'order' => array('first_name' => 'ASC', 'last_name' => 'ASC')));
        $employees = array();
        foreach ($empleados as $emp) {
            $employees[$emp['Employee']['id']] = $emp['Employee']['first_name'] . ' ' . $emp['Employee']['last_name'];
        }
        $this->set(compact('employees'));

        //traigo un array con todos los servicios
        $services = $this->Service->find('list', array('conditions' => array('Service.deleted' => 0), 'order' => array('name' => 'ASC')));
        $this->set(compact('services'));

        //traigo un array con todos los proveedores
        $providers = $this->Provider->find('list', array('conditions' => array('Provider.deleted' => 0), 'order' => array('name' => 'ASC')));
        $this->set(compact('providers'));

        $this->PricetypesReception->recursive = 0;
        $pricetypes_receptions = $this->PricetypesReception->find('all', array());
        $this->set(compact('pricetypes_receptions'));

        $this->PricetypesService->recursive = 0;
        $pricetypes_services = $this->PricetypesService->find('all', array());
        $this->set(compact('pricetypes_services'));

        $this->PricetypesAnimation->recursive = 0;
        $pricetypes_animations = $this->PricetypesAnimation->find('all', array());
        $this->set(compact('pricetypes_animations'));

        $this->PricetypesShow->recursive = 0;
        $pricetypes_shows = $this->PricetypesShow->find('all', array());
        $this->set(compact('pricetypes_shows'));
    }

    function edit($id = null) {
        
        if (!$id && empty($this->data)) {
            $this->Session->setFlash(__('Cumpleaños o Evento Inexistente', true));
            $this->redirect(array('action' => 'index'));
        }
        
        //controlo que si el cumpleaños ya fue pagado no le permito editar ninguno de sus datos
        $trab = $this->Job->read(null, $id);
        if($trab['Job']['paid'] == 'yes'){
            $this->Session->setFlash(__('No se pueden editar los Cumpleaños o Eventos que ya fueron Pagados completamente', true));
            $this->redirect(array('action' => 'index'));
        }
        
        if (!empty($this->data)) {

            $array_datos = $this->data;

            list($d, $m, $a) = explode("/", $array_datos['Job']['date_from']);
            $fecha_inicio = $a . "-" . $m . "-" . $d . ' ' . $array_datos['Job']['start_hour'] . ':' . $array_datos['Job']['start_minute'] . ':00';
            $array_datos['Job']['start_date'] = $fecha_inicio;

            $fecha_fin = $a . "-" . $m . "-" . $d . ' ' . $array_datos['Job']['finish_hour'] . ':' . $array_datos['Job']['finish_minute'] . ':00';
            $array_datos['Job']['finish_date'] = $fecha_fin;

            if ($array_datos['Job']['birthday_date'] != NULL && $array_datos['Job']['type'] == 'birthday') {
                list($d, $m, $a) = explode("/", $array_datos['Job']['birthday_date']);
                $fecha_cumple = $a . "-" . $m . "-" . $d;
                $array_datos['Job']['birthday_date'] = $fecha_cumple;
            } else {
                $array_datos['Job']['birthday_date'] = NULL;
            }

            $tipo = $array_datos['Job']['type'] == 'event' ? 'Evento' : 'Cumpleaños';

            //empiezo una transaccion
            $this->Job->query('SET AUTOCOMMIT = 0;');
            $this->Job->query('START TRANSACTION;');
            $bandera = true; //la uso para ver si algo salio mal
            //ahora borro todas las relaciones con la tabla jobs_details y jobs_details_employees para que despues se carguen solo las correspondientes
            $query = 'SELECT JobsDetailsEmployee.id
                      FROM jobs_details_employees as JobsDetailsEmployee, jobs_details as JobsDetail
                      WHERE JobsDetail.id = JobsDetailsEmployee.jobs_detail_id
                            and JobsDetail.job_id = ' . $array_datos['Job']['id'];
            $borrar_jobs_details_employees = $this->JobsDetailsEmployee->query($query);
            $array_ids_details_employees = array();
            foreach ($borrar_jobs_details_employees as $aux_data) {
                $array_ids_details_employees[$aux_data['JobsDetailsEmployee']['id']] = $aux_data['JobsDetailsEmployee']['id'];
            }

            //borro de la tabla jobs_details_employees
            if (!$this->JobsDetailsEmployee->deleteAll(array('JobsDetailsEmployee.id' => $array_ids_details_employees), false, false)) {
                $bandera = false;
            }
            //borro de la tabla jobs_details
            if (!$this->JobsDetail->deleteAll(array('JobsDetail.job_id' => $array_datos['Job']['id']), false, false)) {
                $bandera = false;
            }

            //guardo el trabajo
            if (!$this->Job->save($array_datos)) {
                $bandera = false;
            }
            $job_id = $array_datos['Job']['id'];

            //me fijo si viene la seña, entonces la cargo como movimiento
            if (isset($array_datos['Job']['sign']) && $array_datos['Job']['sign'] != '') {
                $array_mov = array();
                $array_mov['user_id'] = $this->Auth->user('id');
                $array_mov['type'] = 'in';
                $array_mov['movement'] = 'sign';
                $array_mov['amount'] = $array_datos['Job']['sign'];
                $array_mov['job_id'] = $job_id;

                //guardamos el movimiento
                $this->CashMovement->create();
                if (!$this->CashMovement->save($array_mov)) {
                    $bandera = false;
                }
            }

            //inicializo a cero los totales
            $job_costo_total_cliente = 0;
            $job_price_servicios = 0;
            $job_costo_empleados = 0;
            $reception_costo_empleados = 0;
            $animation_costo_empleados = 0;
            $shows_costo_empleados = 0;
            $productions_costo_empleados = 0;

            /*             * *******EMPIEZA PARTE DE RECEPCIONES***** */
            //ahora guardo las repecciones
            //si estaba chequeado el checkbox de recepciones
            if ($array_datos['Job']['check_reception'] == 1) {

                //guardo el detalle
                $reception_job_detail = array();
                $reception_job_detail['type'] = 'reception';
                $reception_job_detail['job_id'] = $job_id;
                $reception_job_detail['cost'] = $array_datos['Job']['reception_client_cost'];
                $this->JobsDetail->create();
                if (!$this->JobsDetail->save($reception_job_detail)) {
                    $bandera = false;
                }
                $reception_job_detail_id = $this->JobsDetail->id;

                //actualizo el costo total del job
                $job_costo_total_cliente += $reception_job_detail['cost'];

                //ahora guardo cuanto le pago a cada empleado
                foreach ($array_datos['JobsReceptionEmployee'] as $recep) {

//                    if ($recep['employee_id'] != NULL) {
                    if ($recep['costume_id'] != NULL) {
                        //si estaba cargada
                        $reception_job_detail_employee = array();
                        $reception_job_detail_employee['jobs_detail_id'] = $reception_job_detail_id;
                        $reception_job_detail_employee['employee_id'] = $recep['employee_id'];
                        $reception_job_detail_employee['costume_id'] = $recep['costume_id'];
                        $reception_job_detail_employee['cost'] = $recep['cost'] != NULL ? $recep['cost'] : 0;
                        $reception_job_detail_employee['paid'] = $recep['paid'];
                        $this->JobsDetailsEmployee->create();
                        if (!$this->JobsDetailsEmployee->save($reception_job_detail_employee)) {
                            $bandera = false;
                        }
                        $reception_costo_empleados += $reception_job_detail_employee['cost'];
                    }
                }

                //por ultimo actualizamos el campo que tiene el costo total por empleados
                $this->JobsDetail->id = $reception_job_detail_id;
                if (!$this->JobsDetail->saveField('employee_cost', $reception_costo_empleados)) {
                    $bandera = false;
                }
                //actualizo el costo total de empleados
                $job_costo_empleados += $reception_costo_empleados;
            }

            /*             * *******TERMINA PARTE DE RECEPCIONES***** */

            /*             * *******EMPIEZA PARTE DE ANIMACIONES***** */
            //ahora guardo las animaciones
            //si estaba chequeado el checkbox de animaciones
            if ($array_datos['Job']['check_animation'] == 1) {

                //guardo el detalle
                $animation_job_detail = array();
                $animation_job_detail['type'] = 'animation';
                $animation_job_detail['job_id'] = $job_id;
                $animation_job_detail['cost'] = $array_datos['Job']['animation_client_cost'];
                $this->JobsDetail->create();
                if (!$this->JobsDetail->save($animation_job_detail)) {
                    $bandera = false;
                }
                $animation_job_detail_id = $this->JobsDetail->id;

                //actualizo el costo total del job
                $job_costo_total_cliente += $animation_job_detail['cost'];

                //ahora guardo cuanto le pago a cada empleado
                foreach ($array_datos['JobsAnimationEmployee'] as $anim) {

//                    if ($anim['employee_id'] != NULL) {
                    if ($anim['cost'] != NULL) {
                        //si estaba cargada
                        $animation_job_detail_employee = array();
                        $animation_job_detail_employee['jobs_detail_id'] = $animation_job_detail_id;
                        $animation_job_detail_employee['employee_id'] = $anim['employee_id'];
                        $animation_job_detail_employee['cost'] = $anim['cost'];
                        $animation_job_detail_employee['paid'] = $anim['paid'];
                        $this->JobsDetailsEmployee->create();
                        if (!$this->JobsDetailsEmployee->save($animation_job_detail_employee)) {
                            $bandera = false;
                        }
                        $animation_costo_empleados += $anim['cost'];
                    }
                }

                //por ultimo actualizamos el campo que tiene el costo total por empleados
                $this->JobsDetail->id = $animation_job_detail_id;
                if (!$this->JobsDetail->saveField('employee_cost', $animation_costo_empleados)) {
                    $bandera = false;
                }
                //actualizo el costo total de clientes
                $job_costo_empleados += $animation_costo_empleados;
            }


            /*             * *******TERMINA PARTE DE ANIMACIONES***** */

            /*             * *******EMPIEZA PARTE DE SERVICIOS***** */
            //ahora guardo los servicios
            //si estaba chequeado el checkbox de servicios
            if ($array_datos['Job']['check_services'] == 1) {

                //ahora guardo los detalles de cada servicio
                foreach ($array_datos['JobsService'] as $serv) {

                    if ($serv['service_id'] != NULL) {
                        //si estaba cargada
                        //guardo el detalle
                        $service_job_detail = array();
                        $service_job_detail['type'] = 'service';
                        $service_job_detail['job_id'] = $job_id;
                        $service_job_detail['service_id'] = $serv['service_id'];
                        $service_job_detail['provider_id'] = $serv['provider_id'];
                        $service_job_detail['price'] = $serv['price'] != NULL ? $serv['price'] : 0;
                        $service_job_detail['cost'] = $serv['cost'] != NULL ? $serv['cost'] : 0;
                        $service_job_detail['provider_paid'] = $serv['provider_paid'];
                        $this->JobsDetail->create();
                        if (!$this->JobsDetail->save($service_job_detail)) {
                            $bandera = false;
                        }

                        //actualizo el precio total por servicios
                        $job_price_servicios += $service_job_detail['price'];

                        //actualizo el costo total del job
                        $job_costo_total_cliente += $service_job_detail['cost'];
                    }
                }
            }

            /*             * *******TERMINA PARTE DE SERVICIOS***** */

            /*             * *******EMPIEZA PARTE DE SHOWS***** */
            //ahora guardo los shows
            //si estaba chequeado el checkbox de shows
            if ($array_datos['Job']['check_shows'] == 1) {

                //si chequeo algun show
                if (isset($array_datos['JobsShow'])) {

                    foreach ($array_datos['JobsShow'] as $show_checked) {
                        //en el array JobsShow estan aquellos shows que tenian chequeado el checkbox
                        $show_id = $show_checked['show_id'];

                        //guardo el detalle de este show
                        $show_job_detail = array();
                        $show_job_detail['type'] = 'show';
                        $show_job_detail['job_id'] = $job_id;
                        $show_job_detail['show_id'] = $show_id;
                        $show_job_detail['cost'] = $array_datos['JobsShowEmployee'][$show_id]['client_cost'];
                        $this->JobsDetail->create();
                        if (!$this->JobsDetail->save($show_job_detail)) {
                            $bandera = false;
                        }
                        $show_job_detail_id = $this->JobsDetail->id;

                        //actualizo el costo total del job
                        $job_costo_total_cliente += $show_job_detail['cost'];

                        //ahora adentro del array $array_datos['JobsShowEmployee'] tengo los detalles de los empleados de cada show
                        foreach ($array_datos['JobsShowEmployee'][$show_id] as $aux_show_id => $show_emp) {
                            if ($aux_show_id != 'client_cost') {
//                                if ($show_emp['employee_id'] != NULL) {
                                if ($show_emp['costume_id'] != NULL) {
                                    $show_job_detail_employee = array();
                                    $show_job_detail_employee['jobs_detail_id'] = $show_job_detail_id;
                                    $show_job_detail_employee['employee_id'] = $show_emp['employee_id'];
                                    $show_job_detail_employee['costume_id'] = $show_emp['costume_id'];
                                    $show_job_detail_employee['cost'] = $show_emp['cost'] != NULL ? $show_emp['cost'] : 0;
                                    $show_job_detail_employee['paid'] = $show_emp['paid'];
                                    $this->JobsDetailsEmployee->create();
                                    if (!$this->JobsDetailsEmployee->save($show_job_detail_employee)) {
                                        $bandera = false;
                                    }
                                    $shows_costo_empleados += $show_job_detail_employee['cost'];
                                }
                            }
                        }
                        //por ultimo actualizamos el campo que tiene el costo total por empleados
                        $this->JobsDetail->id = $show_job_detail_id;
                        if (!$this->JobsDetail->saveField('employee_cost', $shows_costo_empleados)) {
                            $bandera = false;
                        }
                        //actualizo el costo total de clientes
                        $job_costo_empleados += $shows_costo_empleados;
                        //ahora seteo esto a cero porque sino el proximo show va a tener un costo total
                        //de empleados igual a la sumatoria de todos los shows anteriores
                        $shows_costo_empleados = 0;
                    }
                }
            }

            /*             * *******TERMINA PARTE DE SHOWS***** */

            /*             * *******EMPIEZA PARTE DE PRODUCTIONS***** */
            //ahora guardo las obras
            //si estaba chequeado el checkbox de productions
            if ($array_datos['Job']['check_productions'] == 1) {

                //si chequeo algun show
                if (isset($array_datos['JobsProduction'])) {

                    foreach ($array_datos['JobsProduction'] as $production_checked) {
                        //en el array JobsProduction estan aquellas obras que tenian chequeado el checkbox
                        $production_id = $production_checked['production_id'];

                        //guardo el detalle de esta obra
                        $production_job_detail = array();
                        $production_job_detail['type'] = 'production';
                        $production_job_detail['job_id'] = $job_id;
                        $production_job_detail['production_id'] = $production_id;
                        $production_job_detail['cost'] = $array_datos['JobsProductionEmployee'][$production_id]['client_cost'];
                        $this->JobsDetail->create();
                        if (!$this->JobsDetail->save($production_job_detail)) {
                            $bandera = false;
                        }
                        $production_job_detail_id = $this->JobsDetail->id;

                        //actualizo el costo total del job
                        $job_costo_total_cliente += $production_job_detail['cost'];

                        //ahora adentro del array $array_datos['JobsProductionEmployee'] tengo los detalles de los empleados de cada obra
                        foreach ($array_datos['JobsProductionEmployee'][$production_id] as $aux_production_id => $production_emp) {
                            if ($aux_production_id != 'client_cost') {
//                                if ($production_emp['employee_id'] != NULL) {
                                if ($production_emp['costume_id'] != NULL) {
                                    $production_job_detail_employee = array();
                                    $production_job_detail_employee['jobs_detail_id'] = $production_job_detail_id;
                                    $production_job_detail_employee['employee_id'] = $production_emp['employee_id'];
                                    $production_job_detail_employee['costume_id'] = $production_emp['costume_id'];
                                    $production_job_detail_employee['cost'] = $production_emp['cost'] != NULL ? $production_emp['cost'] : 0;
                                    $production_job_detail_employee['paid'] = $production_emp['paid'];
                                    $this->JobsDetailsEmployee->create();
                                    if (!$this->JobsDetailsEmployee->save($production_job_detail_employee)) {
                                        $bandera = false;
                                    }
                                    $productions_costo_empleados += $production_job_detail_employee['cost'];
                                }
                            }
                        }
                        //por ultimo actualizamos el campo que tiene el costo total por empleados
                        $this->JobsDetail->id = $production_job_detail_id;
                        if (!$this->JobsDetail->saveField('employee_cost', $productions_costo_empleados)) {
                            $bandera = false;
                        }
                        //actualizo el costo total de clientes
                        $job_costo_empleados += $productions_costo_empleados;
                        //ahora seteo esto a cero porque sino la proximo obra va a tener un costo total
                        //de empleados igual a la sumatoria de todos las obras anteriores
                        $productions_costo_empleados = 0;
                    }
                }
            }

            /*             * *******TERMINA PARTE DE PRODUCTIONS***** */


            //por ultimo actualizo los valores del costo de empleados, costo de servicios, y costo total
            $array_guardar = array();
            $array_guardar['id'] = $job_id;
            $array_guardar['total_cost'] = $job_costo_total_cliente;
            $array_guardar['services_cost'] = $job_price_servicios;
            $array_guardar['employee_cost'] = $job_costo_empleados;
            if (!$this->Job->save($array_guardar)) {
                $bandera = false;
            }

            //por ultimo, para que no joda el activity, voy a borrar la última actualización
            //de este job, porque se esta haciendo dos veces el Job->save
            //busco el último registro en Activity
            $activity = $this->Activity->find('first', array(
                'recursive' => -1,
                'conditions' => array(
                    'Activity.user_id' => $this->Auth->user('id'),
                    'Activity.type' => 'update'
                ),
                'order' => array('Activity.created' => 'DESC')
                    ));
            $this->Activity->id = $activity['Activity']['id'];
            if (!$this->Activity->delete()) {
                $bandera = false;
            }

            if ($bandera) {
                $this->Session->setFlash('El ' . $tipo . ' ha sido editado');
                $this->Job->query('COMMIT;');
                $this->Job->query('SET AUTOCOMMIT = 1;');
                $this->redirect(array('controller' => 'futures', 'action' => 'por_dia', strtotime($array_datos['Job']['start_date'])));
            } else {
                $this->Session->setFlash('El ' . $tipo . ' no ha sido editado. Por favor, intente nuevamente.');
                $this->Job->query('ROLLBACK;');
                $this->Job->query('SET AUTOCOMMIT = 1;');
            }
        }
        if (empty($this->data)) {
            $this->Job->recursive = 1;
            $this->data = $this->Job->read(null, $id);
            //acomodo las fechas
            $this->data['Job']['date_from'] = date('d/m/Y', strtotime($this->data['Job']['start_date']));
            $this->data['Job']['start_hour'] = date('H', strtotime($this->data['Job']['start_date']));
            $this->data['Job']['start_minute'] = date('i', strtotime($this->data['Job']['start_date']));
            $this->data['Job']['date_to'] = date('d/m/Y', strtotime($this->data['Job']['finish_date']));
            $this->data['Job']['finish_hour'] = date('H', strtotime($this->data['Job']['finish_date']));
            $this->data['Job']['finish_minute'] = date('i', strtotime($this->data['Job']['finish_date']));

            //si se guardo con todo cero
            if ($this->data['Job']['birthday_date'] == '0000-00-00 00:00:00' || $this->data['Job']['birthday_date'] == NULL) {
                $this->data['Job']['birthday_date'] == NULL;
            } else {
                $this->data['Job']['birthday_date'] = date('d/m/Y', strtotime($this->data['Job']['birthday_date']));
            }

            //ahora me pongo a armar el $this->data para que se levanten todos los datos
            $array_detalles = array();
            foreach ($this->data['JobsDetail'] as $detalle) {

                $array_detalles[$detalle['type']][$detalle['id']]['JobsDetail'] = $detalle;
                //ahora voy a buscar todos los JobsDetailsEmployee de este detalle
                $detalles_emp = $this->JobsDetailsEmployee->find('all', array('conditions' => array('JobsDetailsEmployee.jobs_detail_id' => $detalle['id'])));
                foreach ($detalles_emp as $emp) {
                    $array_detalles[$detalle['type']][$detalle['id']]['JobsDetailsEmployee'][] = $emp['JobsDetailsEmployee'];
                }
            }
            unset($this->data['JobsDetail']);
            unset($this->data['Pricetype']);
            unset($this->data['Pelotero']);
            //EMPIEZA PARTE DE RECEPCIONES
            if (isset($array_detalles['reception'])) {
                $this->data['Job']['check_reception'] = 1;
                foreach ($array_detalles['reception'] as $recep) {
                    $this->data['Job']['reception_employee_count'] = count($recep['JobsDetailsEmployee']);
                    $this->data['Job']['reception_client_cost'] = $recep['JobsDetail']['cost'];

                    $i = 1;
                    foreach ($recep['JobsDetailsEmployee'] as $recep_emp) {
                        $this->data['JobsReceptionEmployee'][$i]['employee_id'] = $recep_emp['employee_id'];
                        $this->data['JobsReceptionEmployee'][$i]['costume_id'] = $recep_emp['costume_id'];
                        $this->data['JobsReceptionEmployee'][$i]['cost'] = $recep_emp['cost'];
                        $this->data['JobsReceptionEmployee'][$i]['paid'] = $recep_emp['paid'];

                        $i++;
                    }
                }
            }
            //TERMINA PARTE DE RECEPCIONES
            //EMPIEZA PARTE DE ANIMACIONES
            if (isset($array_detalles['animation'])) {
                $this->data['Job']['check_animation'] = 1;
                foreach ($array_detalles['animation'] as $anim) {
                    $this->data['Job']['animation_employee_count'] = count($anim['JobsDetailsEmployee']);
                    $this->data['Job']['animation_client_cost'] = $anim['JobsDetail']['cost'];

                    $i = 1;
                    foreach ($anim['JobsDetailsEmployee'] as $anim_emp) {
                        $this->data['JobsAnimationEmployee'][$i]['employee_id'] = $anim_emp['employee_id'];
                        $this->data['JobsAnimationEmployee'][$i]['cost'] = $anim_emp['cost'];
                        $this->data['JobsAnimationEmployee'][$i]['paid'] = $anim_emp['paid'];

                        $i++;
                    }
                }
            }

            //TERMINA PARTE DE ANIMACIONES
            //EMPIEZA PARTE DE SHOWS
            if (isset($array_detalles['show'])) {
                $this->data['Job']['check_shows'] = 1;

                $show_costo_total_cliente = 0;
                foreach ($array_detalles['show'] as $show) {

                    $show_id = $show['JobsDetail']['show_id'];
                    $this->data['JobsShow'][$show['JobsDetail']['show_id']] = 1;
                    $this->data['JobsShowEmployee'][$show_id]['client_cost'] = $show['JobsDetail']['cost'];
                    $this->data['Job']['show_employee_count_' . $show_id] = count($show['JobsDetailsEmployee']);
                    $show_costo_total_cliente += $show['JobsDetail']['cost'];

                    $i = 1;
                    foreach ($show['JobsDetailsEmployee'] as $show_emp) {
                        $this->data['JobsShowEmployee'][$show_id][$i]['employee_id'] = $show_emp['employee_id'];
                        $this->data['JobsShowEmployee'][$show_id][$i]['costume_id'] = $show_emp['costume_id'];
                        $this->data['JobsShowEmployee'][$show_id][$i]['cost'] = $show_emp['cost'];
                        $this->data['JobsShowEmployee'][$show_id][$i]['paid'] = $show_emp['paid'];

                        $i++;
                    }
                }
                $this->data['Job']['shows_client_cost'] = $show_costo_total_cliente;
            }

            //TERMINA PARTE DE SHOWS
            //EMPIEZA PARTE DE SERVICES
            if (isset($array_detalles['service'])) {
                $this->data['Job']['check_services'] = 1;
                $this->data['Job']['service_count'] = count($array_detalles['service']);
                $i = 1;
                foreach ($array_detalles['service'] as $serv) {
                    $this->data['JobsService'][$i]['service_id'] = $serv['JobsDetail']['service_id'];
                    $this->data['JobsService'][$i]['provider_id'] = $serv['JobsDetail']['provider_id'];
                    $this->data['JobsService'][$i]['price'] = $serv['JobsDetail']['price'];
                    $this->data['JobsService'][$i]['cost'] = $serv['JobsDetail']['cost'];
                    $this->data['JobsService'][$i]['provider_paid'] = $serv['JobsDetail']['provider_paid'];

                    $i++;
                }
            }

            //TERMINA PARTE DE SERVICES
            //EMPIEZA PARTE DE PRODUCTIONS
            if (isset($array_detalles['production'])) {
                $this->data['Job']['check_productions'] = 1;

                $production_costo_total_cliente = 0;
                foreach ($array_detalles['production'] as $production) {

                    $production_id = $production['JobsDetail']['production_id'];
                    $this->data['JobsProduction'][$production['JobsDetail']['production_id']] = 1;
                    $this->data['JobsProductionEmployee'][$production_id]['client_cost'] = $production['JobsDetail']['cost'];
                    $this->data['Job']['production_employee_count_' . $production_id] = count($production['JobsDetailsEmployee']);
                    $production_costo_total_cliente += $production['JobsDetail']['cost'];

                    $i = 1;
                    foreach ($production['JobsDetailsEmployee'] as $production_emp) {
                        $this->data['JobsProductionEmployee'][$production_id][$i]['employee_id'] = $production_emp['employee_id'];
                        $this->data['JobsProductionEmployee'][$production_id][$i]['costume_id'] = $production_emp['costume_id'];
                        $this->data['JobsProductionEmployee'][$production_id][$i]['cost'] = $production_emp['cost'];
                        $this->data['JobsProductionEmployee'][$production_id][$i]['paid'] = $production_emp['paid'];

                        $i++;
                    }
                }
                $this->data['Job']['productions_client_cost'] = $production_costo_total_cliente;
            }


            //TERMINA PARTE DE PRODUCTIONS
//            pr($this->data);
//            die;
        }

        $pricetypes = $this->Job->Pricetype->find('list');
        $peloteros = $this->Job->Pelotero->find('list', array('order' => array('name' => 'ASC')));
        $this->set(compact('pricetypes', 'peloteros'));

        //armo el array con las horas
        $hours = array();
        for ($i = 8; $i <= 23; $i++) {
            if ($i < 10) {
                $value = '0' . $i;
            } else {
                $value = '' . $i;
            }
            $hours[$i] = $value;
        }
        $this->set(compact('hours'));

        //armo el array con los minutos
        $minutes = array(0 => '00', 30 => '30');
        $this->set(compact('minutes'));

        //busco todos los peloteros, con toda la informacion
        $peloteros_full = $this->Job->Pelotero->find('all', array('recursive' => -1, 'order' => array('name' => 'ASC')));
        $this->set(compact('peloteros_full'));

        //traigo un array con todos los trajes
        $costumes = $this->Costume->find('list', array('order' => array('name' => 'ASC')));
        $this->set(compact('costumes'));

        //traigo un array con todos los shows
        $shows = $this->Show->find('list', array('order' => array('name' => 'ASC')));
        $this->set(compact('shows'));

        //armo un array indexado por show_id que contenga los trajes que utiliza
        //cada uno, si no tiene ninguno configurado, le ponemos todos los trajes
        $todos_shows = $this->Show->find('all', array('conditions' => array('Show.deleted' => 0), 'order' => array('name' => 'ASC')));
        $shows_trajes = array();
        foreach ($todos_shows as $show) {
            if (empty($show['Costume'])) {
                //si no tiene definido los trajes que utilizara, les pongo todos
                $shows_trajes[$show['Show']['id']]['trajes'] = $costumes;
                $shows_trajes[$show['Show']['id']]['default'] = '';
            } else {
                //sino, recorro los trajes que utiliza y los voy guardando
                $array_trajes = array();
                $array_default = array();
                foreach ($show['Costume'] as $traje) {
                    $array_trajes[$traje['id']] = $traje['name'];
                    //si esta puesto como default
                    if ($traje['CostumesShow']['default'] == 1) {
                        $array_default[$traje['id']] = $traje['id'];
                    }
                }
                $shows_trajes[$show['Show']['id']]['trajes'] = $array_trajes;
                $shows_trajes[$show['Show']['id']]['default'] = implode(',', $array_default);
            }
        }
        $this->set(compact('shows_trajes'));

        //traigo un array con todos las obras
        $productions = $this->Production->find('list', array('order' => array('name' => 'ASC')));
        $this->set(compact('productions'));

        $empleados = $this->Employee->find('all', array('fields' => array('Employee.first_name', 'Employee.last_name', 'Employee.id'), 'order' => array('first_name' => 'ASC', 'last_name' => 'ASC')));
        $employees = array();
        foreach ($empleados as $emp) {
            $employees[$emp['Employee']['id']] = $emp['Employee']['first_name'] . ' ' . $emp['Employee']['last_name'];
        }
        $this->set(compact('employees'));

        //traigo un array con todos los servicios
        $services = $this->Service->find('list', array('order' => array('name' => 'ASC')));
        $this->set(compact('services'));

        //traigo un array con todos los proveedores
        $providers = $this->Provider->find('list', array('order' => array('name' => 'ASC')));
        $this->set(compact('providers'));

        $this->PricetypesReception->recursive = 0;
        $pricetypes_receptions = $this->PricetypesReception->find('all', array());
        $this->set(compact('pricetypes_receptions'));

        $this->PricetypesService->recursive = 0;
        $pricetypes_services = $this->PricetypesService->find('all', array());
        $this->set(compact('pricetypes_services'));

        $this->PricetypesAnimation->recursive = 0;
        $pricetypes_animations = $this->PricetypesAnimation->find('all', array());
        $this->set(compact('pricetypes_animations'));

        $this->PricetypesShow->recursive = 0;
        $pricetypes_shows = $this->PricetypesShow->find('all', array());
        $this->set(compact('pricetypes_shows'));
    }

    function delete($id = null) {
        if (!$id) {
            $this->Session->setFlash(__('Cumpleaños o Evento Inexistente', true));
            $this->redirect(array('action' => 'index'));
        }

        //empiezo una transaccion
        $this->Job->query('SET AUTOCOMMIT = 0;');
        $this->Job->query('START TRANSACTION;');
        $bandera = true; //la uso para ver si algo salio mal
        //
        //ahora borro todas las relaciones con la tabla jobs_details y jobs_details_employees para que despues se carguen solo las correspondientes
        $query = 'SELECT JobsDetailsEmployee.id
                      FROM jobs_details_employees as JobsDetailsEmployee, jobs_details as JobsDetail
                      WHERE JobsDetail.id = JobsDetailsEmployee.jobs_detail_id
                            and JobsDetail.job_id = ' . $id;
        $borrar_jobs_details_employees = $this->JobsDetailsEmployee->query($query);
        $array_ids_details_employees = array();
        foreach ($borrar_jobs_details_employees as $aux_data) {
            $array_ids_details_employees[$aux_data['JobsDetailsEmployee']['id']] = $aux_data['JobsDetailsEmployee']['id'];
        }

        //borro de la tabla jobs_details_employees
        if (!$this->JobsDetailsEmployee->deleteAll(array('JobsDetailsEmployee.id' => $array_ids_details_employees), false, false)) {
            $bandera = false;
        }
        //borro de la tabla jobs_details
        if (!$this->JobsDetail->deleteAll(array('JobsDetail.job_id' => $id), false, false)) {
            $bandera = false;
        }

        if (!$this->Job->delete($id)) {
            $bandera = false;
        }

        if ($bandera) {
            $this->Session->setFlash(__('El Cumpleaños/Evento ha sido eliminado', true));
            $this->Job->query('COMMIT;');
            $this->Job->query('SET AUTOCOMMIT = 1;');
            $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash(__('La Cumpleaños/Evento no ha sido eliminado. Por favor, intente nuevamente.', true));
            $this->Job->query('ROLLBACK;');
            $this->Job->query('SET AUTOCOMMIT = 1;');
        }

        $this->redirect(array('action' => 'index'));
    }

    /**
     * Función que se utiliza para pagar a un empleado por los trabajos 
     * realizados en un determinado cumpleaños 
     * @param type $job_id
     * @param type $employee_id
     * @param int $pagar_caja si es 1 indica que se debe pagar con la caja
     */
    function pay($job_id, $employee_id, $pagar_caja = NULL) {

        //si es un usuario común, solo puede pagar con caja
        if ($this->Auth->user('group_id') == GROUP_USER) {
            $pagar_caja = 1;
        }

        //si tiene que pagar con la caja, registramos este movimiento
        if ($pagar_caja) {

            //busco el monto a registrar
            $sql = 'SELECT SUM(JobsDetailsEmployee.cost) as monto_total
                FROM jobs_details_employees as JobsDetailsEmployee
                WHERE JobsDetailsEmployee.paid = 0
                AND JobsDetailsEmployee.employee_id = ' . $employee_id . '
                AND JobsDetailsEmployee.jobs_detail_id IN (SELECT JobsDetail.id
                                                             FROM jobs_details as JobsDetail
                                                             WHERE JobsDetail.job_id = ' . $job_id . ')';

            $res = $this->Job->query($sql);

            if (empty($res)) {
                //si no encuentra nada es porque hizo alguna cagada con la url
                $this->Session->setFlash(__('Operación inválida', true));
                $this->redirect($this->referer());
            }

            $monto_pagar = $res[0][0]['monto_total'];

            //controlo que haya suficiente dinero en la caja
            if (!$this->Cash->controlarPago($monto_pagar)) {
                //si no alcanza el dinero de la caja para pagar 
                //redirecciono al lugar desde donde fue llamado
                $this->Session->setFlash(__('El dinero en la caja no es suficiente para realizar el pago', true));
                $this->redirect($this->referer());
            }

            $array_mov = array();
            $array_mov['user_id'] = $this->Auth->user('id');
            $array_mov['type'] = 'out';
            $array_mov['movement'] = 'employee';
            $array_mov['amount'] = $monto_pagar;
            $array_mov['job_id'] = $job_id;
            $array_mov['employee_id'] = $employee_id;

            //guardamos el movimiento
            $this->CashMovement->create();
            $this->CashMovement->save($array_mov);
        }

        $sql = 'UPDATE jobs_details_employees as JobsDetailsEmployee
                SET paid = 1
                WHERE JobsDetailsEmployee.employee_id = ' . $employee_id . '
                AND JobsDetailsEmployee.jobs_detail_id IN (SELECT JobsDetail.id
                                                             FROM jobs_details as JobsDetail
                                                             WHERE JobsDetail.job_id = ' . $job_id . ')';

        if ($this->Job->query($sql)) {
            $this->Session->setFlash(__('El Pago ha sido registrado', true));
        } else {
            $this->Session->setFlash(__('El Pago no ha sido registrado. Por favor, intente nuevamente.', true));
        }

        //redirecciono al lugar desde donde fue llamado
        $this->redirect($this->referer());
    }

    /**
     * Función que se utiliza para pagar a un empleado por todos los cumpleaños
     * realizados entre un rango de fechas
     * @param type $type
     * @param type $employee_id
     * @param type $date_from
     * @param type $date_to
     * @param int $pagar_caja si es 1 indica que se debe pagar con la caja
     */
    function pay_all($type, $employee_id, $date_from, $date_to, $pagar_caja = NULL) {

        //si es un usuario común, solo puede pagar con caja
        if ($this->Auth->user('group_id') == GROUP_USER) {
            $pagar_caja = 1;
        }

        //si tiene que pagar con la caja, registramos este movimiento
        if ($pagar_caja) {
            $sql = 'SELECT SUM(JobsDetailsEmployee.cost) as total
                FROM jobs_details_employees as JobsDetailsEmployee
                WHERE paid = 0
                AND JobsDetailsEmployee.employee_id = ' . $employee_id . '
                AND JobsDetailsEmployee.jobs_detail_id IN (SELECT JobsDetail.id
                                                             FROM jobs_details as JobsDetail, jobs as Job
                                                             WHERE Job.id = JobsDetail.job_id
                                                              AND Job.type = "' . $type . '"
                                                              AND Job.start_date >= "' . $date_from . '"
                                                              AND Job.finish_date <= "' . $date_to . '"
                                                              )';

            $res = $this->Job->query($sql);

            if (empty($res)) {
                //si no encuentra nada es porque hizo alguna cagada con la url
                $this->Session->setFlash(__('Operación inválida', true));
                $this->redirect($this->referer());
            }

            //controlo que haya suficiente dinero en la caja
            if (!$this->Cash->controlarPago($res[0][0]['total'])) {
                //si no alcanza el dinero de la caja para pagar 
                //redirecciono al lugar desde donde fue llamado
                $this->Session->setFlash(__('El dinero en la caja no es suficiente para realizar el pago', true));
                $this->redirect($this->referer());
            }
        }

        //ahora marcamos como pagado estos registros
        if ($this->Job->payAll($type, $employee_id, $date_from, $date_to, $pagar_caja)) {
            $this->Session->setFlash(__('El Pago de todos los Cumpleaños ha sido registrado', true));
        } else {
            $this->Session->setFlash(__('El Pago de todos los Cumpleaños no ha sido registrado. Por favor, intente nuevamente.', true));
        }
        //redirecciono al lugar desde donde fue llamado
        $this->redirect($this->referer());
    }

    /**
     * Función que se utiliza para pagar a un proveedor por un determinado cumpleaños
     * @param type $job_id
     * @param type $provider_id
     * @param int $pagar_caja si es 1 indica que se debe pagar con la caja
     */
    function pay_service($job_id, $provider_id, $pagar_caja = NULL) {

        //si es un usuario común, solo puede pagar con caja
        if ($this->Auth->user('group_id') == GROUP_USER) {
            $pagar_caja = 1;
        }

        //si tiene que pagar con la caja, registramos este movimiento
        if ($pagar_caja) {

            //busco el monto a registrar
            $jobs_detail = $this->JobsDetail->find('first', array(
                'recursive' => -1,
                'fields' => array('SUM(price) as total'),
                'conditions' => array(
                    'JobsDetail.job_id' => $job_id,
                    'JobsDetail.provider_id' => $provider_id,
                    'JobsDetail.type' => 'service',
                    'JobsDetail.provider_paid' => 0
                ),
                'group' => array('job_id')
                    ));


            if (empty($jobs_detail)) {
                //si no encuentra nada es porque hizo alguna cagada con la url
                $this->Session->setFlash(__('Operación inválida', true));
                $this->redirect($this->referer());
            }

            //controlo que haya suficiente dinero en la caja
            if (!$this->Cash->controlarPago($jobs_detail[0]['total'])) {
                //si no alcanza el dinero de la caja para pagar 
                //redirecciono al lugar desde donde fue llamado
                $this->Session->setFlash(__('El dinero en la caja no es suficiente para realizar el pago', true));
                $this->redirect($this->referer());
            }

            $array_mov = array();
            $array_mov['user_id'] = $this->Auth->user('id');
            $array_mov['type'] = 'out';
            $array_mov['movement'] = 'provider';
            $array_mov['amount'] = $jobs_detail[0]['total'];
            $array_mov['job_id'] = $job_id;
            $array_mov['provider_id'] = $provider_id;

            //guardamos el movimiento
            $this->CashMovement->create();
            $this->CashMovement->save($array_mov);
        }

        //ahora lo marcamos como pagado
        $sql = 'UPDATE jobs_details as JobsDetail
                SET provider_paid = 1
                WHERE JobsDetail.job_id = ' . $job_id . '
                AND JobsDetail.provider_id = ' . $provider_id . '
                AND JobsDetail.type = "service"';

        if ($this->Job->query($sql)) {
            $this->Session->setFlash(__('El Pago ha sido registrado', true));
        } else {
            $this->Session->setFlash(__('El Pago no ha sido registrado. Por favor, intente nuevamente.', true));
        }

        //redirecciono al lugar desde donde fue llamado
        $this->redirect($this->referer());
    }

    /**
     * Función que se utiliza para pagar a un proveedor por todos los cumpleaños
     * realizados entre un rango de fechas
     * @param type $date_from
     * @param type $date_to
     * @param type $provider_id
     * @param int $pagar_caja si es 1 indica que se debe pagar con la caja
     */
    function pay_all_service($date_from, $date_to, $provider_id, $pagar_caja = NULL) {

        //si es un usuario común, solo puede pagar con caja
        if ($this->Auth->user('group_id') == GROUP_USER) {
            $pagar_caja = 1;
        }

        //si tiene que pagar con la caja, registramos este movimiento
        if ($pagar_caja) {

            //busco el monto a registrar
            $sql = 'SELECT SUM(JobsDetail.price)as total
                FROM jobs_details as JobsDetail
                WHERE provider_paid = 0
                AND JobsDetail.type = "service"
                AND JobsDetail.provider_id = ' . $provider_id . '
                AND JobsDetail.job_id IN (SELECT Job.id
                                             FROM jobs as Job
                                             WHERE Job.start_date >= "' . $date_from . '"
                                              AND Job.finish_date <= "' . $date_to . '")';
            $res = $this->Job->query($sql);

            if (empty($res)) {
                //si no encuentra nada es porque hizo alguna cagada con la url
                $this->Session->setFlash(__('Operación inválida', true));
                $this->redirect($this->referer());
            }

            //controlo que haya suficiente dinero en la caja
            if (!$this->Cash->controlarPago($res[0][0]['total'])) {
                //si no alcanza el dinero de la caja para pagar 
                //redirecciono al lugar desde donde fue llamado
                $this->Session->setFlash(__('El dinero en la caja no es suficiente para realizar el pago', true));
                $this->redirect($this->referer());
            }

            //si el dinero alcanza, vamos a registrar cada uno de estos 
            //movimientos en la caja
            $sql = 'SELECT job_id, SUM(price) as total
                FROM jobs_details as JobsDetail
                WHERE provider_paid = 0
                AND JobsDetail.type = "service"
                AND JobsDetail.provider_id = ' . $provider_id . '
                AND JobsDetail.job_id IN (SELECT Job.id
                                             FROM jobs as Job
                                             WHERE Job.start_date >= "' . $date_from . '"
                                              AND Job.finish_date <= "' . $date_to . '")
                GROUP BY JobsDetail.job_id';

            $registros = $this->Job->query($sql);

            foreach ($registros as $jobs_detail) {

                $array_mov = array();
                $array_mov['user_id'] = $this->Auth->user('id');
                $array_mov['type'] = 'out';
                $array_mov['movement'] = 'provider';
                $array_mov['amount'] = $jobs_detail[0]['total'];
                $array_mov['job_id'] = $jobs_detail['JobsDetail']['job_id'];
                $array_mov['provider_id'] = $provider_id;

                //guardamos el movimiento
                $this->CashMovement->create();
                $this->CashMovement->save($array_mov);
            }
        }

        //ahora por ultimo los marcamos como pagados
        if ($this->Job->payAllService($date_from, $date_to, $provider_id, $pagar_caja)) {
            $this->Session->setFlash(__('El Pago de todos los Servicios ha sido registrado', true));
        } else {
            $this->Session->setFlash(__('El Pago de todos los Servicios no ha sido registrado. Por favor, intente nuevamente.', true));
        }
        //redirecciono al lugar desde donde fue llamado
        $this->redirect($this->referer());
    }

    function imprimir_view() {

        Configure::write('debug', 0);
        $this->layout = 'ajax';

        $job = $this->Session->read('data_job_view');

        $pricetypes = $this->Job->Pricetype->find('list');

        //busco todos los peloteros, con toda la informacion
        $peloteros = $this->Job->Pelotero->find('list', array('recursive' => -1, 'order' => array('name' => 'ASC')));

        //traigo un array con todos los trajes
        $costumes = $this->Costume->find('list', array('order' => array('name' => 'ASC')));

        //traigo un array con todos los shows
        $shows = $this->Show->find('list', array('order' => array('name' => 'ASC')));

        //traigo un array con todos las obras
        $productions = $this->Production->find('list', array('order' => array('name' => 'ASC')));

        $empleados = $this->Employee->find('all', array('fields' => array('Employee.first_name', 'Employee.last_name', 'Employee.id'), 'order' => array('first_name' => 'ASC', 'last_name' => 'ASC')));
        $employees = array();
        foreach ($empleados as $emp) {
            $employees[$emp['Employee']['id']] = $emp['Employee']['first_name'] . ' ' . $emp['Employee']['last_name'];
        }

        //traigo un array con todos los servicios
        $services = $this->Service->find('list', array('order' => array('name' => 'ASC')));

        //traigo un array con todos los proveedores
        $providers = $this->Provider->find('list', array('order' => array('name' => 'ASC')));

        //require(SITE_PATH . "/app/vendors/fpdf/fpdf.php");
        App::import('Vendor', 'WellNamed', array('file' => 'fpdf' . DS . 'fpdf.php'));


        //$pdf = new FPDF();
        $pdf = new FPDF('L', 'mm', 'A4');
        $pdf->AliasNbPages();
        $pdf->AddPage();

        $pdf->SetFont('Arial', '', 7);

        $margen_arriba = 12;
        $margen_izquierdo = 12;
        $margen_derecho = 12;
        $pdf->SetTopMargin($margen_arriba);
        $pdf->SetLeftMargin($margen_izquierdo);
        $pdf->SetRightMargin($margen_derecho);

        //defino el salto de linea
        $salto_linea = 0;
        $salto_trabajo = 1;

        //defino el alto de cada linea
        $alto_linea = 3;

        /*         * ************************************************** */
        /*         * *  empieza la parte de la hoja de la izquierda  ** */
        /*         * ************************************************** */

        $pdf->Image(SITE_URL . '/img/festilu.png', 10, 10, 45);
        $pdf->SetY(17);
        $pdf->SetX(80);
        $pdf->Cell(50, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Contacto'));
        $pdf->Ln($alto_linea);
        $pdf->SetX(75);
        $pdf->Cell(50, $alto_linea, iconv('utf-8', 'ISO-8859-1', '(0342) 155 065 171'));
        $pdf->Ln($alto_linea);
        $pdf->SetX(75);
        $pdf->Cell(50, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'eventosfestilu@gmail.com'));
        $pdf->Ln($alto_linea);
        $pdf->SetX(75);
        $pdf->Cell(50, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'www.festilu.com.ar'));
        $pdf->Ln($alto_linea);

        $pdf->SetY(40);

        $pdf->SetFont('Arial', 'B', 10);
        $tipo = $job['Job']['type'] == 'event' ? 'Evento' : 'Cumpleaños';
        $pdf->MultiCell(0, $alto_linea + 3, iconv('utf-8', 'ISO-8859-1', 'Presupuesto para ' . $tipo));
        $pdf->SetFont('Arial', '', 7);
        $pdf->Ln($salto_linea);
        if ($job['Job']['type'] == 'birthday') {
            $pdf->MultiCell(0, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Nombre del Cumpleañero/a: ' . $job['Job']['birthday_name']));
            $pdf->Ln($salto_linea);

            $fecha = '';
            if ($job['Job']['birthday_date'] != '0000-00-00 00:00:00' && $job['Job']['birthday_date'] != NULL) {
                $fecha = date('d/m/Y', strtotime($job['Job']['birthday_date']));
            }
            $pdf->MultiCell(0, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Fecha de Nacimiento: ' . $fecha));
            $pdf->Ln($salto_linea);

            $edad = $job['Job']['age'] != NULL ? $job['Job']['age'] . ' años' : '';
            $pdf->MultiCell(0, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Edad: ' . $edad));
            $pdf->Ln($salto_linea);
        }
        if ($job['Job']['type'] == 'event') {
            $pdf->MultiCell(0, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Nombre del Evento: ' . $job['Job']['event_name']));
            $pdf->Ln($salto_linea);
        }
        if ($job['Job']['pelotero_id'] != NULL) {
            $pelotero = $job['Job']['pelotero_id'] != NULL ? $peloteros[$job['Job']['pelotero_id']] : '';
            $pdf->MultiCell(0, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Pelotero: ' . $pelotero));
            $pdf->Ln($salto_linea);
        }

        $pdf->Cell(35, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Fecha de Inicio: ' . date('d/m/Y', strtotime($job['Job']['start_date']))));
        $pdf->Cell(10, $alto_linea, iconv('utf-8', 'ISO-8859-1', date('H:i', strtotime($job['Job']['start_date'])) . ' - ' . date('H:i', strtotime($job['Job']['finish_date']))));
        $pdf->Ln($alto_linea);


        $pdf->MultiCell(0, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Dirección: ' . $job['Job']['address']));
        $pdf->Ln($salto_linea);
        $pdf->Cell(50, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Teléfono Fijo: ' . $job['Job']['phone_number']));
        $pdf->Cell(70, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Teléfono Celular: ' . $job['Job']['movil_number']));
        $pdf->Ln($alto_linea);
        $pdf->MultiCell(0, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Email: ' . $job['Job']['email']));
        $pdf->Ln($salto_linea);
        $pdf->MultiCell(0, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Nombre del Contacto: ' . $job['Job']['contact_name']));
        $pdf->Ln($salto_linea);
        $pdf->MultiCell(0, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Cantidad de Invitados: ' . $job['Job']['count_invited']));
        $pdf->Ln($salto_linea);

        if (isset($job['detalles']['reception'])) {
            //obtengo el valor de ubicacion vertical
            $pdf->Ln($salto_trabajo);
            $y = $pdf->GetY();
            $pdf->Line($margen_izquierdo, $y, 120, $y);
            $pdf->Ln($salto_trabajo);

            $cant_empleados_recepcion = 0;
            $trajes_recepcion = array();
            foreach ($job['detalles']['reception'] as $reception) {

                foreach ($reception['JobsDetailsEmployee'] as $recep_employees) {
                    $cant_empleados_recepcion++;
                    $trajes_recepcion[$recep_employees['costume_id']] = $costumes[$recep_employees['costume_id']];
                }
            }
            $trajes = implode(', ', $trajes_recepcion);
            $pdf->SetFont('Arial', 'B', 8);
            $pdf->Cell(10, $alto_linea, iconv('utf-8', 'ISO-8859-1', ''));
            $pdf->Cell(40, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Presentación'));
            $pdf->Ln($alto_linea + 1);
            $pdf->SetFont('Arial', '', 7);
            $pdf->MultiCell(0, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Trajes: ' . $trajes));
            $pdf->Ln($salto_linea);
            $pdf->SetFont('Arial', 'B', 7);
            $pdf->Cell(40, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Costo Total Presentación: '), 'LTB');
            $pdf->SetFont('Arial', '', 7);
            $pdf->Cell(25, $alto_linea, iconv('utf-8', 'ISO-8859-1', '$' . $reception['JobsDetail']['cost']), 'RTB');
            $pdf->Ln($alto_linea);
        }

        if (isset($job['detalles']['animation'])) {
            $pdf->Ln($salto_trabajo);
            $y = $pdf->GetY();
            $pdf->Line($margen_izquierdo, $y, 120, $y);
            $pdf->Ln($salto_trabajo);

            $pdf->SetFont('Arial', 'B', 8);
            $pdf->Cell(10, $alto_linea, iconv('utf-8', 'ISO-8859-1', ''));
            $pdf->Cell(40, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Animación'));
            $pdf->Ln($alto_linea + 1);
            $pdf->SetFont('Arial', '', 7);
            foreach ($job['detalles']['animation'] as $animation) {
                $pdf->Ln($salto_linea);

                $cant_empleados_animacion = 0;
                foreach ($animation['JobsDetailsEmployee'] as $anim_employees) {
                    $cant_empleados_animacion++;
                }
                $pdf->Ln($salto_linea);
                $pdf->MultiCell(0, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Cantidad de Animadores: ' . $cant_empleados_animacion));
                $pdf->Ln($salto_linea);
                $pdf->SetFont('Arial', 'B', 7);
                $pdf->Cell(40, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Costo Total Animación: '), 'LTB');
                $pdf->SetFont('Arial', '', 7);
                $pdf->Cell(25, $alto_linea, iconv('utf-8', 'ISO-8859-1', '$' . $animation['JobsDetail']['cost']), 'RTB');
                $pdf->Ln($alto_linea);
            }
        }

        if (isset($job['detalles']['show'])) {
            $pdf->Ln($salto_trabajo);
            $y = $pdf->GetY();
            $pdf->Line($margen_izquierdo, $y, 120, $y);
            $pdf->Ln($salto_trabajo);

            $pdf->SetFont('Arial', 'B', 8);
            $pdf->Cell(10, $alto_linea, iconv('utf-8', 'ISO-8859-1', ''));
            $pdf->Cell(40, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Shows'));
            $pdf->Ln($alto_linea + 1);
            $pdf->SetFont('Arial', '', 7);

            $costo_total_shows = 0;
            foreach ($job['detalles']['show'] as $show) {
                $costo_total_shows += $show['JobsDetail']['cost'];

                $pdf->Ln($salto_linea);
                $pdf->SetFont('Arial', 'BI', 7);
                $pdf->MultiCell(0, $alto_linea, iconv('utf-8', 'ISO-8859-1', $shows[$show['JobsDetail']['show_id']]));
                $pdf->SetFont('Arial', '', 7);

                $i = 0;
                $cant_emp_show = 0;
                foreach ($show['JobsDetailsEmployee'] as $show_emp) {
                    $cant_emp_show++;
                }
                $pdf->Cell(5, $alto_linea, iconv('utf-8', 'ISO-8859-1', ''));
                $pdf->Cell(0, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Personajes: ' . $cant_emp_show));
                $pdf->Ln($alto_linea);
                $pdf->Cell(5, $alto_linea, iconv('utf-8', 'ISO-8859-1', ''));
                $pdf->Cell(35, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Costo Show: '));
                $pdf->Cell(25, $alto_linea, iconv('utf-8', 'ISO-8859-1', '$' . $show['JobsDetail']['cost']));
                $pdf->Ln($alto_linea);
            }
            $pdf->Ln($salto_linea);
            $pdf->Ln($salto_linea);
            $pdf->SetFont('Arial', 'B', 7);
            $pdf->Cell(40, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Costo Total Shows: '), 'LTB');
            $pdf->SetFont('Arial', '', 7);
            $pdf->Cell(25, $alto_linea, iconv('utf-8', 'ISO-8859-1', '$' . $costo_total_shows), 'RTB');
            $pdf->Ln($alto_linea);
        }
        if (isset($job['detalles']['service'])) {
            $pdf->Ln($salto_trabajo);
            $y = $pdf->GetY();
            $pdf->Line($margen_izquierdo, $y, 120, $y);
            $pdf->Ln($salto_trabajo);

            $pdf->SetFont('Arial', 'B', 8);
            $pdf->Cell(10, $alto_linea, iconv('utf-8', 'ISO-8859-1', ''));
            $pdf->Cell(40, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Servicios'));
            $pdf->Ln($alto_linea + 1);
            $pdf->SetFont('Arial', '', 7);

            $i = 0;
            $costo_total_servicios = 0;
            foreach ($job['detalles']['service'] as $serv_detail) {
                $costo_total_servicios += $serv_detail['JobsDetail']['cost'];

                $pdf->Ln($salto_linea);
                $pdf->SetFont('Arial', 'B', 7);
                $pdf->Cell(40, $alto_linea, iconv('utf-8', 'ISO-8859-1', $services[$serv_detail['JobsDetail']['service_id']]));
                $pdf->SetFont('Arial', '', 7);
                $pdf->Cell(25, $alto_linea, iconv('utf-8', 'ISO-8859-1', '$' . $serv_detail['JobsDetail']['cost']));
                $pdf->Ln($alto_linea);
            }
            $pdf->Ln($salto_linea);
            $pdf->SetFont('Arial', 'B', 7);
            $pdf->Cell(40, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Costo Total Servicios: '), 'LTB');
            $pdf->SetFont('Arial', '', 7);
            $pdf->Cell(25, $alto_linea, iconv('utf-8', 'ISO-8859-1', '$' . $costo_total_servicios), 'RTB');
            $pdf->Ln($alto_linea);
        }

        if (isset($job['detalles']['production'])) {
            $pdf->Ln($salto_trabajo);
            $y = $pdf->GetY();
            $pdf->Line($margen_izquierdo, $y, 120, $y);
            $pdf->Ln($salto_trabajo);

            $pdf->SetFont('Arial', 'B', 8);
            $pdf->Cell(10, $alto_linea, iconv('utf-8', 'ISO-8859-1', ''));
            $pdf->Cell(40, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Obras'));
            $pdf->Ln($alto_linea + 1);
            $pdf->SetFont('Arial', '', 7);

            $costo_total_productions = 0;
            foreach ($job['detalles']['production'] as $production) {
                $costo_total_productions += $production['JobsDetail']['cost'];
                $pdf->Ln($salto_linea);

                $pdf->SetFont('Arial', 'BI', 7);
                $pdf->MultiCell(0, $alto_linea, iconv('utf-8', 'ISO-8859-1', $productions[$production['JobsDetail']['production_id']]));
                $pdf->SetFont('Arial', '', 7);

                $cant_emp_production = 0;
                foreach ($production['JobsDetailsEmployee'] as $production_emp) {
                    $cant_emp_production++;
                }

                $pdf->Cell(5, $alto_linea, iconv('utf-8', 'ISO-8859-1', ''));
                $pdf->Cell(0, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Personajes: ' . $cant_emp_production));
                $pdf->Ln($alto_linea);
                $pdf->Cell(5, $alto_linea, iconv('utf-8', 'ISO-8859-1', ''));
                $pdf->Cell(35, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Costo Obra: '));
                $pdf->Cell(25, $alto_linea, iconv('utf-8', 'ISO-8859-1', '$' . $production['JobsDetail']['cost']));
                $pdf->Ln($alto_linea);
            }
            $pdf->SetFont('Arial', 'B', 7);
            $pdf->Cell(40, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Costo Total Obras: '), 'LTB');
            $pdf->SetFont('Arial', '', 7);
            $pdf->Cell(25, $alto_linea, iconv('utf-8', 'ISO-8859-1', '$' . $costo_total_productions), 'RTB');
            $pdf->Ln($alto_linea);
        }
        $pdf->Ln($alto_linea);
        $y = $pdf->GetY();
        $pdf->Line($margen_izquierdo, $y, 120, $y);
        $pdf->Ln($alto_linea);
        $pdf->SetFont('Arial', 'B', 9);
        $pdf->Cell(40, $alto_linea + 2, iconv('utf-8', 'ISO-8859-1', 'Costo Total ' . $tipo . ': '), 'LTB');
        $pdf->Cell(25, $alto_linea + 2, iconv('utf-8', 'ISO-8859-1', '$' . $job['Job']['total_cost']), 'RTB');
        $pdf->Ln($alto_linea);
        $pdf->Ln($alto_linea);
        $senia = $job['Job']['sign'] == '' ? 0 : $job['Job']['sign'];
        $pdf->Cell(40, $alto_linea + 2, iconv('utf-8', 'ISO-8859-1', 'Seña: '), 'LTB');
        $pdf->Cell(25, $alto_linea + 2, iconv('utf-8', 'ISO-8859-1', '$' . $senia), 'RTB');
        $pdf->Ln($alto_linea);
        $pdf->Ln($alto_linea);
        $pdf->Cell(40, $alto_linea + 2, iconv('utf-8', 'ISO-8859-1', 'Saldo: '), 'LTB');
        $pdf->Cell(25, $alto_linea + 2, iconv('utf-8', 'ISO-8859-1', '$' . ($job['Job']['total_cost'] - $job['Job']['sign'])), 'RTB');
        $pdf->Ln($alto_linea);
        $pdf->Ln($alto_linea);
        $pdf->Ln($alto_linea);
        $pdf->SetFont('Arial', 'BI', 7);
        $pdf->MultiCell(0, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'No válido como comprobante de pago'));


        /*         * ************************************************** */
        /*         * *   empieza la parte de la hoja de la derecha   ** */
        /*         * ************************************************** */
        $defasaje_X = 160;

        $pdf->SetX(80 + $defasaje_X);
        $pdf->Image(SITE_URL . '/img/festilu.png', 10 + $defasaje_X, 10, 45);
        $pdf->SetY(17);
        $pdf->SetX(80 + $defasaje_X);
        $pdf->Cell(50, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Contacto'));
        $pdf->Ln($alto_linea);
        $pdf->SetX(75 + $defasaje_X);
        $pdf->Cell(50, $alto_linea, iconv('utf-8', 'ISO-8859-1', '(0342) 155 065 171'));
        $pdf->Ln($alto_linea);
        $pdf->SetX(75 + $defasaje_X);
        $pdf->Cell(50, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'eventosfestilu@gmail.com'));
        $pdf->Ln($alto_linea);
        $pdf->SetX(75 + $defasaje_X);
        $pdf->Cell(50, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'www.festilu.com.ar'));
        $pdf->Ln($alto_linea);

        $pdf->SetY(40);

        $pdf->SetFont('Arial', 'B', 10);
        $tipo = $job['Job']['type'] == 'event' ? 'Evento' : 'Cumpleaños';
        $pdf->SetX($defasaje_X);
        $pdf->MultiCell(0, $alto_linea + 3, iconv('utf-8', 'ISO-8859-1', 'Presupuesto para ' . $tipo));
        $pdf->SetFont('Arial', '', 7);
        $pdf->Ln($salto_linea);
        if ($job['Job']['type'] == 'birthday') {
            $pdf->SetX($defasaje_X);
            $pdf->MultiCell(0, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Nombre del Cumpleañero/a: ' . $job['Job']['birthday_name']));
            $pdf->Ln($salto_linea);

            $fecha = '';
            if ($job['Job']['birthday_date'] != '0000-00-00 00:00:00' && $job['Job']['birthday_date'] != NULL) {
                $fecha = date('d/m/Y', strtotime($job['Job']['birthday_date']));
            }
            $pdf->SetX($defasaje_X);
            $pdf->MultiCell(0, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Fecha de Nacimiento: ' . $fecha));
            $pdf->Ln($salto_linea);

            $edad = $job['Job']['age'] != NULL ? $job['Job']['age'] . ' años' : '';
            $pdf->SetX($defasaje_X);
            $pdf->MultiCell(0, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Edad: ' . $edad));
            $pdf->Ln($salto_linea);
        }
        if ($job['Job']['type'] == 'event') {
            $pdf->SetX($defasaje_X);
            $pdf->MultiCell(0, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Nombre del Evento: ' . $job['Job']['event_name']));
            $pdf->Ln($salto_linea);
        }
        if ($job['Job']['pelotero_id'] != NULL) {
            $pelotero = $job['Job']['pelotero_id'] != NULL ? $peloteros[$job['Job']['pelotero_id']] : '';
            $pdf->SetX($defasaje_X);
            $pdf->MultiCell(0, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Pelotero: ' . $pelotero));
            $pdf->Ln($salto_linea);
        }

        $pdf->SetX($defasaje_X);
        $pdf->Cell(35, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Fecha de Inicio: ' . date('d/m/Y', strtotime($job['Job']['start_date']))));
        $pdf->Cell(10, $alto_linea, iconv('utf-8', 'ISO-8859-1', date('H:i', strtotime($job['Job']['start_date'])) . ' - ' . date('H:i', strtotime($job['Job']['finish_date']))));
        $pdf->Ln($alto_linea);

        $pdf->SetX($defasaje_X);
        $pdf->MultiCell(0, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Dirección: ' . $job['Job']['address']));
        $pdf->Ln($salto_linea);
        $pdf->SetX($defasaje_X);
        $pdf->Cell(50, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Teléfono Fijo: ' . $job['Job']['phone_number']));
        $pdf->Cell(70, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Teléfono Celular: ' . $job['Job']['movil_number']));
        $pdf->Ln($alto_linea);
        $pdf->SetX($defasaje_X);
        $pdf->MultiCell(0, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Email: ' . $job['Job']['email']));
        $pdf->Ln($salto_linea);
        $pdf->SetX($defasaje_X);
        $pdf->MultiCell(0, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Nombre del Contacto: ' . $job['Job']['contact_name']));
        $pdf->Ln($salto_linea);
        $pdf->SetX($defasaje_X);
        $pdf->MultiCell(0, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Cantidad de Invitados: ' . $job['Job']['count_invited']));
        $pdf->Ln($salto_linea);

        if (isset($job['detalles']['reception'])) {
            //obtengo el valor de ubicacion vertical
            $pdf->Ln($salto_trabajo);
            $y = $pdf->GetY();
            $pdf->Line($defasaje_X, $y, 120 + $defasaje_X, $y);
            $pdf->Ln($salto_trabajo);

            $cant_empleados_recepcion = 0;
            $trajes_recepcion = array();
            foreach ($job['detalles']['reception'] as $reception) {

                foreach ($reception['JobsDetailsEmployee'] as $recep_employees) {
                    $cant_empleados_recepcion++;
                    $trajes_recepcion[$recep_employees['costume_id']] = $costumes[$recep_employees['costume_id']];
                }
            }
            $trajes = implode(', ', $trajes_recepcion);
            $pdf->SetFont('Arial', 'B', 8);
            $pdf->SetX($defasaje_X);
            $pdf->Cell(10, $alto_linea, iconv('utf-8', 'ISO-8859-1', ''));
            $pdf->Cell(40, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Presentación'));
            $pdf->Ln($alto_linea + 1);
            $pdf->SetFont('Arial', '', 7);
            $pdf->SetX($defasaje_X);
            $pdf->MultiCell(0, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Trajes: ' . $trajes));
            $pdf->Ln($salto_linea);
            $pdf->SetFont('Arial', 'B', 7);
            $pdf->SetX($defasaje_X);
            $pdf->Cell(40, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Costo Total Presentación: '), 'LTB');
            $pdf->SetFont('Arial', '', 7);
            $pdf->Cell(25, $alto_linea, iconv('utf-8', 'ISO-8859-1', '$' . $reception['JobsDetail']['cost']), 'RTB');
            $pdf->Ln($alto_linea);
        }

        if (isset($job['detalles']['animation'])) {
            $pdf->Ln($salto_trabajo);
            $y = $pdf->GetY();
            $pdf->Line($defasaje_X, $y, 120 + $defasaje_X, $y);
            $pdf->Ln($salto_trabajo);

            $pdf->SetFont('Arial', 'B', 8);
            $pdf->SetX($defasaje_X);
            $pdf->Cell(10, $alto_linea, iconv('utf-8', 'ISO-8859-1', ''));
            $pdf->Cell(40, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Animación'));
            $pdf->Ln($alto_linea + 1);
            $pdf->SetFont('Arial', '', 7);
            foreach ($job['detalles']['animation'] as $animation) {
                $pdf->Ln($salto_linea);

                $cant_empleados_animacion = 0;
                foreach ($animation['JobsDetailsEmployee'] as $anim_employees) {
                    $cant_empleados_animacion++;
                }
                $pdf->Ln($salto_linea);
                $pdf->SetX($defasaje_X);
                $pdf->MultiCell(0, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Cantidad de Animadores: ' . $cant_empleados_animacion));
                $pdf->Ln($salto_linea);
                $pdf->SetFont('Arial', 'B', 7);
                $pdf->SetX($defasaje_X);
                $pdf->Cell(40, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Costo Total Animación: '), 'LTB');
                $pdf->SetFont('Arial', '', 7);
                $pdf->Cell(25, $alto_linea, iconv('utf-8', 'ISO-8859-1', '$' . $animation['JobsDetail']['cost']), 'RTB');
                $pdf->Ln($alto_linea);
            }
        }

        if (isset($job['detalles']['show'])) {
            $pdf->Ln($salto_trabajo);
            $y = $pdf->GetY();
            $pdf->Line($defasaje_X, $y, 120 + $defasaje_X, $y);
            $pdf->Ln($salto_trabajo);

            $pdf->SetFont('Arial', 'B', 8);
            $pdf->SetX($defasaje_X);
            $pdf->Cell(10, $alto_linea, iconv('utf-8', 'ISO-8859-1', ''));
            $pdf->Cell(40, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Shows'));
            $pdf->Ln($alto_linea + 1);
            $pdf->SetFont('Arial', '', 7);

            $costo_total_shows = 0;
            foreach ($job['detalles']['show'] as $show) {
                $costo_total_shows += $show['JobsDetail']['cost'];

                $pdf->Ln($salto_linea);
                $pdf->SetFont('Arial', 'BI', 7);
                $pdf->SetX($defasaje_X);
                $pdf->MultiCell(0, $alto_linea, iconv('utf-8', 'ISO-8859-1', $shows[$show['JobsDetail']['show_id']]));
                $pdf->SetFont('Arial', '', 7);

                $i = 0;
                $cant_emp_show = 0;
                foreach ($show['JobsDetailsEmployee'] as $show_emp) {
                    $cant_emp_show++;
                }
                $pdf->SetX($defasaje_X);
                $pdf->Cell(5, $alto_linea, iconv('utf-8', 'ISO-8859-1', ''));
                $pdf->Cell(0, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Personajes: ' . $cant_emp_show));
                $pdf->Ln($alto_linea);
                $pdf->SetX($defasaje_X);
                $pdf->Cell(5, $alto_linea, iconv('utf-8', 'ISO-8859-1', ''));
                $pdf->Cell(35, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Costo Show: '));
                $pdf->Cell(25, $alto_linea, iconv('utf-8', 'ISO-8859-1', '$' . $show['JobsDetail']['cost']));
                $pdf->Ln($alto_linea);
            }
            $pdf->Ln($salto_linea);
            $pdf->Ln($salto_linea);
            $pdf->SetFont('Arial', 'B', 7);
            $pdf->SetX($defasaje_X);
            $pdf->Cell(40, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Costo Total Shows: '), 'LTB');
            $pdf->SetFont('Arial', '', 7);
            $pdf->Cell(25, $alto_linea, iconv('utf-8', 'ISO-8859-1', '$' . $costo_total_shows), 'RTB');
            $pdf->Ln($alto_linea);
        }
        if (isset($job['detalles']['service'])) {
            $pdf->Ln($salto_trabajo);
            $y = $pdf->GetY();
            $pdf->Line($defasaje_X, $y, 120 + $defasaje_X, $y);
            $pdf->Ln($salto_trabajo);

            $pdf->SetFont('Arial', 'B', 8);
            $pdf->SetX($defasaje_X);
            $pdf->Cell(10, $alto_linea, iconv('utf-8', 'ISO-8859-1', ''));
            $pdf->Cell(40, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Servicios'));
            $pdf->Ln($alto_linea + 1);
            $pdf->SetFont('Arial', '', 7);

            $i = 0;
            $costo_total_servicios = 0;
            foreach ($job['detalles']['service'] as $serv_detail) {
                $costo_total_servicios += $serv_detail['JobsDetail']['cost'];

                $pdf->Ln($salto_linea);
                $pdf->SetFont('Arial', 'B', 7);
                $pdf->SetX($defasaje_X);
                $pdf->Cell(40, $alto_linea, iconv('utf-8', 'ISO-8859-1', $services[$serv_detail['JobsDetail']['service_id']]));
                $pdf->SetFont('Arial', '', 7);
                $pdf->Cell(25, $alto_linea, iconv('utf-8', 'ISO-8859-1', '$' . $serv_detail['JobsDetail']['cost']));
                $pdf->Ln($alto_linea);
            }
            $pdf->Ln($salto_linea);
            $pdf->SetFont('Arial', 'B', 7);
            $pdf->SetX($defasaje_X);
            $pdf->Cell(40, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Costo Total Servicios: '), 'LTB');
            $pdf->SetFont('Arial', '', 7);
            $pdf->Cell(25, $alto_linea, iconv('utf-8', 'ISO-8859-1', '$' . $costo_total_servicios), 'RTB');
            $pdf->Ln($alto_linea);
        }

        if (isset($job['detalles']['production'])) {
            $pdf->Ln($salto_trabajo);
            $y = $pdf->GetY();
            $pdf->Line($defasaje_X, $y, 120 + $defasaje_X, $y);
            $pdf->Ln($salto_trabajo);

            $pdf->SetFont('Arial', 'B', 8);
            $pdf->SetX($defasaje_X);
            $pdf->Cell(10, $alto_linea, iconv('utf-8', 'ISO-8859-1', ''));
            $pdf->Cell(40, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Obras'));
            $pdf->Ln($alto_linea + 1);
            $pdf->SetFont('Arial', '', 7);

            $costo_total_productions = 0;
            foreach ($job['detalles']['production'] as $production) {
                $costo_total_productions += $production['JobsDetail']['cost'];
                $pdf->Ln($salto_linea);

                $pdf->SetFont('Arial', 'BI', 7);
                $pdf->SetX($defasaje_X);
                $pdf->MultiCell(0, $alto_linea, iconv('utf-8', 'ISO-8859-1', $productions[$production['JobsDetail']['production_id']]));
                $pdf->SetFont('Arial', '', 7);

                $cant_emp_production = 0;
                foreach ($production['JobsDetailsEmployee'] as $production_emp) {
                    $cant_emp_production++;
                }

                $pdf->SetX($defasaje_X);
                $pdf->Cell(5, $alto_linea, iconv('utf-8', 'ISO-8859-1', ''));
                $pdf->Cell(0, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Personajes: ' . $cant_emp_production));
                $pdf->Ln($alto_linea);
                $pdf->SetX($defasaje_X);
                $pdf->Cell(5, $alto_linea, iconv('utf-8', 'ISO-8859-1', ''));
                $pdf->Cell(35, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Costo Obra: '));
                $pdf->Cell(25, $alto_linea, iconv('utf-8', 'ISO-8859-1', '$' . $production['JobsDetail']['cost']));
                $pdf->Ln($alto_linea);
            }
            $pdf->SetFont('Arial', 'B', 7);
            $pdf->SetX($defasaje_X);
            $pdf->Cell(40, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'Costo Total Obras: '), 'LTB');
            $pdf->SetFont('Arial', '', 7);
            $pdf->Cell(25, $alto_linea, iconv('utf-8', 'ISO-8859-1', '$' . $costo_total_productions), 'RTB');
            $pdf->Ln($alto_linea);
        }
        $pdf->Ln($alto_linea);
        $y = $pdf->GetY();
        $pdf->Line($defasaje_X, $y, 120 + $defasaje_X, $y);
        $pdf->Ln($alto_linea);
        $pdf->SetFont('Arial', 'B', 9);
        $pdf->SetX($defasaje_X);
        $pdf->Cell(40, $alto_linea + 2, iconv('utf-8', 'ISO-8859-1', 'Costo Total ' . $tipo . ': '), 'LTB');
        $pdf->Cell(25, $alto_linea + 2, iconv('utf-8', 'ISO-8859-1', '$' . $job['Job']['total_cost']), 'RTB');
        $pdf->Ln($alto_linea);
        $pdf->Ln($alto_linea);
        $pdf->SetX($defasaje_X);
        $senia = $job['Job']['sign'] == '' ? 0 : $job['Job']['sign'];
        $pdf->Cell(40, $alto_linea + 2, iconv('utf-8', 'ISO-8859-1', 'Seña: '), 'LTB');
        $pdf->Cell(25, $alto_linea + 2, iconv('utf-8', 'ISO-8859-1', '$' . $senia), 'RTB');
        $pdf->Ln($alto_linea);
        $pdf->Ln($alto_linea);
        $pdf->SetX($defasaje_X);
        $pdf->Cell(40, $alto_linea + 2, iconv('utf-8', 'ISO-8859-1', 'Saldo: '), 'LTB');
        $pdf->Cell(25, $alto_linea + 2, iconv('utf-8', 'ISO-8859-1', '$' . ($job['Job']['total_cost'] - $job['Job']['sign'])), 'RTB');
        $pdf->Ln($alto_linea);
        $pdf->Ln($alto_linea);
        $pdf->Ln($alto_linea);
        $pdf->SetFont('Arial', 'BI', 7);
        $pdf->SetX($defasaje_X);
        $pdf->MultiCell(0, $alto_linea, iconv('utf-8', 'ISO-8859-1', 'No válido como comprobante de pago'));


        $pdf->Output();
        die;
    }

    function emails() {

        $filtro = '';
        $fecha_min = '';
        $fecha_max = '';

        if (!empty($this->data)) {

            $datos = $this->data['Job'];
            if (isset($datos['date_from']) && trim($datos['date_from']) != '') {
                list($d, $m, $a) = explode("/", $datos['date_from']);
                $datos['date_from'] = $a . "-" . $m . "-" . $d . ' 00:00:00';

                $filtro .= ' AND Job.start_date >= "' . $datos['date_from'] . '"';
                $fecha_min = 'si';
            }
            if (isset($datos['date_to']) && trim($datos['date_to']) != '') {
                list($d, $m, $a) = explode("/", $datos['date_to']);
                $datos['date_to'] = $a . "-" . $m . "-" . $d . ' 23:59:59';

                $filtro .= ' AND Job.finish_date <= "' . $datos['date_to'] . '"';
                $fecha_max = 'si';
            }

            //guardo el filtro usado en session para despues recordarlo
            $restricciones['Job'] = $filtro;
            $restricciones['data'] = $this->data;
            $this->Session->write('search_conditions_emails', $restricciones);
        } elseif ($this->Session->check('search_conditions_emails')) {

            $restricciones = $this->Session->read('search_conditions_emails');
            $filtro = $restricciones['Job'];
            $this->data = $restricciones['data'];
            $datos = $this->data['Job'];

            if (isset($datos['date_from']) && trim($datos['date_from']) != '') {
                $fecha_min = 'si';
            }
            if (isset($datos['date_to']) && trim($datos['date_to']) != '') {
                $fecha_max = 'si';
            }
        }

        //si no viene ningun filtro de fecha, le pongo lo de la ultima semana
        if ($fecha_min != 'si' && $fecha_max != 'si') {
            $aux_fecha_min = date('Y-m-d 00:00:00');
            $aux_fecha_max = date('Y-m-d 23:59:59', strtotime('+6day', strtotime(date('Y-m-d H:i:s'))));
            $filtro .= ' AND Job.start_date >= "' . $aux_fecha_min . '"';
            $filtro .= ' AND Job.finish_date <= "' . $aux_fecha_max . '"';

            $this->data['Job']['date_from'] = date('d/m/Y', strtotime($aux_fecha_min));
            $this->data['Job']['date_to'] = date('d/m/Y', strtotime($aux_fecha_max));
        }

        if (substr($filtro, 0, 5) == ' AND ') {
            $filtro = substr($filtro, 4);
        }

        $jobs = $this->Job->find('all', array(
            'recursive' => -1,
            'conditions' => array(
                'Job.email IS NOT NULL',
                'Job.email != ""',
                'Job.type' => 'birthday',
                $filtro
            ),
            'order' => array('contact_name' => 'ASC',
                'email' => 'ASC'),
            'group' => array('Job.email',
                'Job.contact_name')
                )
        );
        $this->set(compact('jobs'));
    }

    /**
     * Función que le agrega la seña a un determinado trabajo
     */
    function agregar_senia($job_id) {

        if (!empty($this->data)) {
            //primero actualizamos el valor sign en el job
            $this->Job->id = $job_id;
            $this->Job->saveField('sign', $this->data['Job']['sign']);

            //ahora registramos el movimiento en la caja
            $array_mov = array();
            $array_mov['user_id'] = $this->Auth->user('id');
            $array_mov['type'] = 'in';
            $array_mov['movement'] = 'sign';
            $array_mov['amount'] = $this->data['Job']['sign'];
            $array_mov['job_id'] = $job_id;

            //guardamos el movimiento
            $this->CashMovement->create();
            $this->CashMovement->save($array_mov);

            $this->Session->setFlash(__('La seña se cargo exitosamente.', true));
            $this->redirect($this->referer());
        }
    }

    function cargar_movimiento($job_id) {

        if (!empty($this->data)) {
            //primero actualizamos el valor sign en el job
//            $this->Job->id = $job_id;                                 //comentado el 28/01/2015 porque me parece que estaba mal
//            $this->Job->saveField('sign', $this->data['Job']['sign']);//comentado el 28/01/2015 porque me parece que estaba mal
            //ahora registramos el movimiento en la caja
            $array_mov = array();
            $array_mov['user_id'] = $this->Auth->user('id');
            $array_mov['type'] = 'in';
            $array_mov['movement'] = 'birthday';
            $array_mov['amount'] = $this->data['Job']['amount'];
            $array_mov['job_id'] = $job_id;

            //guardamos el movimiento
            $this->CashMovement->create();
            $this->CashMovement->save($array_mov);

            $this->Session->setFlash(__('El movimiento se cargo exitosamente.', true));
            $this->redirect($this->referer());
        }
    }

    function cargar_movimiento_grande($job_id) {

        if (!empty($this->data)) {

            //ahora registramos el movimiento en la caja
            $array_mov = array();
            $array_mov['user_id'] = $this->Auth->user('id');
            $array_mov['type'] = 'in';
            $array_mov['movement'] = 'bank';
            $array_mov['amount'] = $this->data['BigCashMovement']['amount'];
            $array_mov['job_id'] = $job_id;

            //guardamos el movimiento
            $this->BigCashMovement->create();
            $this->BigCashMovement->save($array_mov);

            $this->Session->setFlash(__('El movimiento se cargo exitosamente.', true));
            $this->redirect($this->referer());
        }
    }

    /**
     * Función que marca como pagado un trabajo y calcula cuanto es lo que falta pagar
     * de dicho trabajo. Si caja == 'grande' se realiza 
     * el ingreso del dinero a la caja grande, si es == 'chica', se agrega a la chica
     * y si es 'sin' entonces solamente se lo marca como pagado (opción solo disponible
     * para un usuario admin)
     * @param type $job_id
     * @param type $caja
     */
    function pay_job($job_id, $caja = 'chica') {

        if ($this->Auth->user('group_id') != GROUP_ADMIN && !in_array($caja, array('chica', 'grande'))) {
            $this->Session->setFlash(__('Debe seleccionar caja grande o chica', true));
            $this->redirect($this->referer());
        }

        $job = $this->Job->find('first', array(
            'conditions' => array(
                'Job.id' => $job_id
            )
                ));

        if (empty($job_id)) {
            $this->Session->setFlash(__('No se encontró el trabajo.', true));
            $this->redirect($this->referer());
        }

        $tipo = $job['Job']['type'] == 'event' ? 'Evento' : 'Cumpleaños';

        if ($job['Job']['paid'] == 'yes') {
            $this->Session->setFlash(__('Este trabajo ya se encuentra pagado.', true));
            $this->redirect($this->referer());
        }



        //empiezo una transaccion
        $this->Job->query('SET AUTOCOMMIT = 0;');
        $this->Job->query('START TRANSACTION;');
        $bandera = true; //la uso para ver si algo salio mal

        $this->Job->id = $job_id;
        if (!$this->Job->saveField('paid', 'yes')) {
            $bandera = false;
        }

        //si se registra el pago en alguna caja
        if ($caja != 'sin') {

            $costo_total = $job['Job']['total_cost'];
            $senia = $job['Job']['sign'] ? $job['Job']['sign'] : 0;

            //busco todos los movimientos de caja chica de este trabajo, que no sean de seña
            //sino que solo de ingresos por pagos de cumpleaños
            $movimientos = $this->CashMovement->find('all', array(
                'recursive' => -1,
                'fields' => array('SUM(amount) as total'),
                'conditions' => array(
                    'CashMovement.job_id' => $job_id,
                    'CashMovement.movement' => 'birthday'
                )
                    ));

            $caja_chica = $movimientos[0][0]['total'] ? $movimientos[0][0]['total'] : 0;

            //busco todos los movimientos de caja grande de este trabajo, que no sean de seña
            //sino que solo de ingresos por pagos de cumpleaños
            $movimientos_grandes = $this->BigCashMovement->find('all', array(
                'recursive' => -1,
                'fields' => array('SUM(amount) as total'),
                'conditions' => array(
                    'BigCashMovement.job_id' => $job_id,
                    'BigCashMovement.movement' => 'bank'
                )
                    ));

            $caja_grande = $movimientos_grandes[0][0]['total'] ? $movimientos_grandes[0][0]['total'] : 0;
            //calculo el importe que se va a pagar
            $importe_pagado = $costo_total - $senia - $caja_chica - $caja_grande;

//            pr($importe_pagado);
//            die;
            //si paga en la caja chica
            if ($caja == 'chica') {
                $array_mov = array();
                $array_mov['user_id'] = $this->Auth->user('id');
                $array_mov['type'] = 'in';
                $array_mov['movement'] = 'job_payment';
                $array_mov['amount'] = $importe_pagado;
                $array_mov['job_id'] = $job_id;

                //guardamos el movimiento
                $this->CashMovement->create();
                if (!$this->CashMovement->save($array_mov)) {
                    $bandera = false;
                }
            } else {
                //paga con caja grande
                $array_mov = array();
                $array_mov['user_id'] = $this->Auth->user('id');
                $array_mov['type'] = 'in';
                $array_mov['movement'] = 'job_payment';
                $array_mov['amount'] = $importe_pagado;
                $array_mov['job_id'] = $job_id;

                //guardamos el movimiento
                $this->BigCashMovement->create();
                if(!$this->BigCashMovement->save($array_mov)){
                    $bandera = false;
                }
            }
        }

        if ($bandera) {
            $this->Session->setFlash('El ' . $tipo . ' se marcó como pagado');
            $this->Job->query('COMMIT;');
            $this->Job->query('SET AUTOCOMMIT = 1;');
        } else {
            $this->Session->setFlash('El ' . $tipo . ' no se marcó como pagado. Por favor, intente nuevamente.');
            $this->Job->query('ROLLBACK;');
            $this->Job->query('SET AUTOCOMMIT = 1;');
        }

        $this->redirect($this->referer());
    }

}
